Merge branch 'master' into 120-solr-backend
This commit is contained in:
@@ -1,5 +1,42 @@
|
||||
(function ($) {
|
||||
module("Backend CKAN");
|
||||
|
||||
test('_parseCkanResourceUrl', function() {
|
||||
var resid = 'eb23e809-ccbb-4ad1-820a-19586fc4bebd';
|
||||
var url = 'http://demo.ckan.org/dataset/some-dataset/resource/' + resid;
|
||||
var out = recline.Backend.Ckan._parseCkanResourceUrl(url);
|
||||
var exp = {
|
||||
resource_id: resid,
|
||||
endpoint: 'http://demo.ckan.org/api'
|
||||
}
|
||||
deepEqual(out, exp);
|
||||
});
|
||||
|
||||
test('_normalizeQuery', function() {
|
||||
var dataset = new recline.Model.Dataset({
|
||||
url: 'does-not-matter',
|
||||
id: 'xyz',
|
||||
backend: 'ckan'
|
||||
});
|
||||
|
||||
var queryObj = {
|
||||
q: 'abc',
|
||||
sort: [
|
||||
{ field: 'location', order: 'desc' },
|
||||
{ field: 'last' }
|
||||
]
|
||||
};
|
||||
var out = recline.Backend.Ckan._normalizeQuery(queryObj, dataset);
|
||||
var exp = {
|
||||
resource_id: dataset.id,
|
||||
q: 'abc',
|
||||
sort: 'location desc,last ',
|
||||
limit: 10,
|
||||
offset: 0
|
||||
};
|
||||
deepEqual(out, exp);
|
||||
});
|
||||
|
||||
test("fetch", function() {
|
||||
var dataset = new recline.Model.Dataset({
|
||||
url: 'http://localhost:5000/dataset/test-data-viewer/resource/4f1299ab-a100-4e5f-ba81-e6d234a2f3bd',
|
||||
@@ -162,3 +199,4 @@ var sample_data = {
|
||||
"success": true
|
||||
};
|
||||
|
||||
})(this.jQuery);
|
||||
|
||||
@@ -34,12 +34,12 @@ test("parseCSV", function() {
|
||||
deepEqual(row, {Name: 'Jones, Jay', Value: 10});
|
||||
});
|
||||
|
||||
test("parseCSVsemicolon", function() {
|
||||
test("parseCSV - semicolon", function() {
|
||||
var csv = '"Jones; Jay";10\n' +
|
||||
'"Xyz ""ABC"" O\'Brien";11:35\n' +
|
||||
'"Other; AN";12:35\n';
|
||||
|
||||
var array = recline.Backend.CSV.parseCSV(csv, {separator : ';'});
|
||||
var array = recline.Backend.CSV.parseCSV(csv, {delimiter : ';'});
|
||||
var exp = [
|
||||
['Jones; Jay', 10],
|
||||
['Xyz "ABC" O\'Brien', '11:35' ],
|
||||
@@ -49,12 +49,12 @@ test("parseCSVsemicolon", function() {
|
||||
|
||||
});
|
||||
|
||||
test("parseCSVdelimiter", function() {
|
||||
test("parseCSV - quotechar", function() {
|
||||
var csv = "'Jones, Jay',10\n" +
|
||||
"'Xyz \"ABC\" O''Brien',11:35\n" +
|
||||
"'Other; AN',12:35\n";
|
||||
|
||||
var array = recline.Backend.CSV.parseCSV(csv, {delimiter:"'"});
|
||||
var array = recline.Backend.CSV.parseCSV(csv, {quotechar:"'"});
|
||||
var exp = [
|
||||
["Jones, Jay", 10],
|
||||
["Xyz \"ABC\" O'Brien", "11:35" ],
|
||||
@@ -64,7 +64,7 @@ test("parseCSVdelimiter", function() {
|
||||
|
||||
});
|
||||
|
||||
test("serializeCSV", function() {
|
||||
test("serializeCSV - Array", function() {
|
||||
var csv = [
|
||||
['Jones, Jay', 10],
|
||||
['Xyz "ABC" O\'Brien', '11:35' ],
|
||||
@@ -78,5 +78,22 @@ test("serializeCSV", function() {
|
||||
deepEqual(array, exp);
|
||||
});
|
||||
|
||||
test("serializeCSV - Object", function() {
|
||||
var indata = {
|
||||
fields: [ {id: 'name'}, {id: 'number'}],
|
||||
records: [
|
||||
{name: 'Jones, Jay', number: 10},
|
||||
{name: 'Xyz "ABC" O\'Brien', number: '11:35' },
|
||||
{name: 'Other, AN', number: '12:35' }
|
||||
]
|
||||
};
|
||||
|
||||
var array = recline.Backend.CSV.serializeCSV(indata);
|
||||
var exp = 'name,number\n' +
|
||||
'"Jones, Jay",10\n' +
|
||||
'"Xyz \"ABC\" O\'Brien",11:35\n' +
|
||||
'"Other, AN",12:35\n';
|
||||
deepEqual(array, exp);
|
||||
});
|
||||
|
||||
})(this.jQuery);
|
||||
|
||||
@@ -196,52 +196,53 @@ test("query", function() {
|
||||
$.ajax.restore();
|
||||
});
|
||||
|
||||
test("write", function() {
|
||||
var url = 'http://localhost:9200/recline-test/es-write';
|
||||
var backend = new recline.Backend.ElasticSearch.Wrapper(url);
|
||||
stop();
|
||||
|
||||
var id = parseInt(Math.random()*100000000).toString();
|
||||
var rec = {
|
||||
id: id,
|
||||
title: 'my title'
|
||||
};
|
||||
var jqxhr = backend.upsert(rec);
|
||||
jqxhr.done(function(data) {
|
||||
ok(data.ok);
|
||||
equal(data._id, id);
|
||||
equal(data._type, 'es-write');
|
||||
equal(data._version, 1);
|
||||
|
||||
// update
|
||||
rec.title = 'new title';
|
||||
var jqxhr = backend.upsert(rec);
|
||||
jqxhr.done(function(data) {
|
||||
equal(data._version, 2);
|
||||
|
||||
// delete
|
||||
var jqxhr = backend.delete(rec.id);
|
||||
jqxhr.done(function(data) {
|
||||
ok(data.ok);
|
||||
rec = null;
|
||||
|
||||
// try to get ...
|
||||
var jqxhr = backend.get(id);
|
||||
jqxhr.done(function(data) {
|
||||
// should not be here
|
||||
ok(false, 'Should have got 404');
|
||||
}).error(function(error) {
|
||||
equal(error.status, 404);
|
||||
start();
|
||||
});
|
||||
});
|
||||
});
|
||||
}).fail(function(error) {
|
||||
console.log(error);
|
||||
ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
|
||||
start();
|
||||
});
|
||||
});
|
||||
// DISABLED - this test requires ElasticSearch to be running locally
|
||||
// test("write", function() {
|
||||
// var url = 'http://localhost:9200/recline-test/es-write';
|
||||
// var backend = new recline.Backend.ElasticSearch.Wrapper(url);
|
||||
// stop();
|
||||
//
|
||||
// var id = parseInt(Math.random()*100000000).toString();
|
||||
// var rec = {
|
||||
// id: id,
|
||||
// title: 'my title'
|
||||
// };
|
||||
// var jqxhr = backend.upsert(rec);
|
||||
// jqxhr.done(function(data) {
|
||||
// ok(data.ok);
|
||||
// equal(data._id, id);
|
||||
// equal(data._type, 'es-write');
|
||||
// equal(data._version, 1);
|
||||
//
|
||||
// // update
|
||||
// rec.title = 'new title';
|
||||
// var jqxhr = backend.upsert(rec);
|
||||
// jqxhr.done(function(data) {
|
||||
// equal(data._version, 2);
|
||||
//
|
||||
// // delete
|
||||
// var jqxhr = backend.remove(rec.id);
|
||||
// jqxhr.done(function(data) {
|
||||
// ok(data.ok);
|
||||
// rec = null;
|
||||
//
|
||||
// // try to get ...
|
||||
// var jqxhr = backend.get(id);
|
||||
// jqxhr.done(function(data) {
|
||||
// // should not be here
|
||||
// ok(false, 'Should have got 404');
|
||||
// }).error(function(error) {
|
||||
// equal(error.status, 404);
|
||||
// start();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// }).fail(function(error) {
|
||||
// console.log(error);
|
||||
// ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
|
||||
// start();
|
||||
// });
|
||||
// });
|
||||
|
||||
|
||||
// ==================================================
|
||||
@@ -289,63 +290,64 @@ test("query", function() {
|
||||
$.ajax.restore();
|
||||
});
|
||||
|
||||
test("write", function() {
|
||||
var dataset = new recline.Model.Dataset({
|
||||
url: 'http://localhost:9200/recline-test/es-write',
|
||||
backend: 'elasticsearch'
|
||||
});
|
||||
|
||||
stop();
|
||||
|
||||
var id = parseInt(Math.random()*100000000).toString();
|
||||
var rec = new recline.Model.Record({
|
||||
id: id,
|
||||
title: 'my title'
|
||||
});
|
||||
dataset.records.add(rec);
|
||||
// have to do this explicitly as we not really supporting adding new items atm
|
||||
dataset._changes.creates.push(rec.toJSON());
|
||||
var jqxhr = dataset.save();
|
||||
jqxhr.done(function(data) {
|
||||
ok(data.ok);
|
||||
equal(data._id, id);
|
||||
equal(data._type, 'es-write');
|
||||
equal(data._version, 1);
|
||||
|
||||
// update
|
||||
rec.set({title: 'new title'});
|
||||
// again set up by hand ...
|
||||
dataset._changes.creates = [];
|
||||
dataset._changes.updates.push(rec.toJSON());
|
||||
var jqxhr = dataset.save();
|
||||
jqxhr.done(function(data) {
|
||||
equal(data._version, 2);
|
||||
|
||||
// delete
|
||||
dataset._changes.updates = 0;
|
||||
dataset._changes.deletes.push(rec.toJSON());
|
||||
var jqxhr = dataset.save();
|
||||
jqxhr.done(function(data) {
|
||||
ok(data.ok);
|
||||
rec = null;
|
||||
|
||||
// try to get ...
|
||||
var es = new recline.Backend.ElasticSearch.Wrapper(dataset.get('url'));
|
||||
var jqxhr = es.get(id);
|
||||
jqxhr.done(function(data) {
|
||||
// should not be here
|
||||
ok(false, 'Should have got 404');
|
||||
}).error(function(error) {
|
||||
equal(error.status, 404);
|
||||
start();
|
||||
});
|
||||
});
|
||||
});
|
||||
}).fail(function(error) {
|
||||
console.log(error);
|
||||
ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
|
||||
start();
|
||||
});
|
||||
});
|
||||
// DISABLED - this test requires ElasticSearch to be running locally
|
||||
// test("write", function() {
|
||||
// var dataset = new recline.Model.Dataset({
|
||||
// url: 'http://localhost:9200/recline-test/es-write',
|
||||
// backend: 'elasticsearch'
|
||||
// });
|
||||
//
|
||||
// stop();
|
||||
//
|
||||
// var id = parseInt(Math.random()*100000000).toString();
|
||||
// var rec = new recline.Model.Record({
|
||||
// id: id,
|
||||
// title: 'my title'
|
||||
// });
|
||||
// dataset.records.add(rec);
|
||||
// // have to do this explicitly as we not really supporting adding new items atm
|
||||
// dataset._changes.creates.push(rec.toJSON());
|
||||
// var jqxhr = dataset.save();
|
||||
// jqxhr.done(function(data) {
|
||||
// ok(data.ok);
|
||||
// equal(data._id, id);
|
||||
// equal(data._type, 'es-write');
|
||||
// equal(data._version, 1);
|
||||
//
|
||||
// // update
|
||||
// rec.set({title: 'new title'});
|
||||
// // again set up by hand ...
|
||||
// dataset._changes.creates = [];
|
||||
// dataset._changes.updates.push(rec.toJSON());
|
||||
// var jqxhr = dataset.save();
|
||||
// jqxhr.done(function(data) {
|
||||
// equal(data._version, 2);
|
||||
//
|
||||
// // delete
|
||||
// dataset._changes.updates = 0;
|
||||
// dataset._changes.deletes.push(rec.toJSON());
|
||||
// var jqxhr = dataset.save();
|
||||
// jqxhr.done(function(data) {
|
||||
// ok(data.ok);
|
||||
// rec = null;
|
||||
//
|
||||
// // try to get ...
|
||||
// var es = new recline.Backend.ElasticSearch.Wrapper(dataset.get('url'));
|
||||
// var jqxhr = es.get(id);
|
||||
// jqxhr.done(function(data) {
|
||||
// // should not be here
|
||||
// ok(false, 'Should have got 404');
|
||||
// }).error(function(error) {
|
||||
// equal(error.status, 404);
|
||||
// start();
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
// }).fail(function(error) {
|
||||
// console.log(error);
|
||||
// ok(false, 'Basic request failed - is ElasticSearch running locally on port 9200 (required for this test!)');
|
||||
// start();
|
||||
// });
|
||||
// });
|
||||
|
||||
})(this.jQuery);
|
||||
|
||||
@@ -11,9 +11,20 @@ var memoryData = [
|
||||
, {id: 5, date: '2011-10-11', x: 6, y: 12, z: 18, country: 'DE', label: 'sixth'}
|
||||
];
|
||||
|
||||
var memoryFields = [
|
||||
{id: 'id'},
|
||||
{id: 'date', type: 'date'},
|
||||
{id: 'x', type: 'integer'},
|
||||
{id: 'y', type: 'integer'},
|
||||
{id: 'z', type: 'integer'},
|
||||
{id: 'country'},
|
||||
{id: 'label'}
|
||||
];
|
||||
|
||||
var _wrapData = function() {
|
||||
var dataCopy = $.extend(true, [], memoryData);
|
||||
return new recline.Backend.Memory.Store(dataCopy);
|
||||
// return new recline.Backend.Memory.Store(dataCopy, fields);
|
||||
return new recline.Backend.Memory.Store(dataCopy, memoryFields);
|
||||
}
|
||||
|
||||
test('basics', function () {
|
||||
@@ -40,7 +51,7 @@ test('query sort', function () {
|
||||
var data = _wrapData();
|
||||
var queryObj = {
|
||||
sort: [
|
||||
{'y': {order: 'desc'}}
|
||||
{field: 'y', order: 'desc'}
|
||||
]
|
||||
};
|
||||
data.query(queryObj).then(function(out) {
|
||||
@@ -49,7 +60,7 @@ test('query sort', function () {
|
||||
|
||||
var queryObj = {
|
||||
sort: [
|
||||
{'country': {order: 'desc'}}
|
||||
{field: 'country', order: 'desc'}
|
||||
]
|
||||
};
|
||||
data.query(queryObj).then(function(out) {
|
||||
@@ -58,7 +69,7 @@ test('query sort', function () {
|
||||
|
||||
var queryObj = {
|
||||
sort: [
|
||||
{'country': {order: 'asc'}}
|
||||
{field: 'country', order: 'asc'}
|
||||
]
|
||||
};
|
||||
data.query(queryObj).then(function(out) {
|
||||
@@ -74,7 +85,7 @@ test('query string', function () {
|
||||
});
|
||||
|
||||
data.query({q: 'UK 6'}).then(function(out) {
|
||||
equal(out.total, 1);
|
||||
equal(out.total, 2); // the new regex support will find 2 hits
|
||||
deepEqual(out.hits[0].id, 1);
|
||||
});
|
||||
});
|
||||
@@ -82,27 +93,63 @@ test('query string', function () {
|
||||
test('filters', function () {
|
||||
var data = _wrapData();
|
||||
var query = new recline.Model.Query();
|
||||
query.addFilter({type: 'term', fieldType: 'string', field: 'country', term: 'UK'});
|
||||
query.addFilter({type: 'term', field: 'country', term: 'UK'});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 3);
|
||||
deepEqual(_.pluck(out.hits, 'country'), ['UK','UK','UK']);
|
||||
});
|
||||
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', fieldType: 'date', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
|
||||
query.addFilter({type: 'range', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 3);
|
||||
deepEqual(_.pluck(out.hits, 'date'), ['2011-01-01','2011-02-03','2011-04-05']);
|
||||
});
|
||||
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', fieldType: 'number', field: 'z', start: '0', stop: '10'});
|
||||
query.addFilter({type: 'range', field: 'z', start: '0', stop: '10'});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 3);
|
||||
deepEqual(_.pluck(out.hits, 'z'), [3,6,9]);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
test('filters with nulls', function () {
|
||||
var data = _wrapData();
|
||||
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', field: 'z', start: '', stop: null});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 6);
|
||||
});
|
||||
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', field: 'x', start: '', stop: '3'});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 3);
|
||||
});
|
||||
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', field: 'x', start: '3', stop: ''});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 4);
|
||||
});
|
||||
|
||||
data.data[5].country = '';
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', field: 'country', start: '', stop: 'Z'});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 5);
|
||||
});
|
||||
|
||||
query = new recline.Model.Query();
|
||||
query.addFilter({type: 'range', field: 'x', start: '', stop: ''});
|
||||
data.query(query.toJSON()).then(function(out) {
|
||||
equal(out.total, 6);
|
||||
});
|
||||
});
|
||||
|
||||
test('facet', function () {
|
||||
var data = _wrapData();
|
||||
var query = new recline.Model.Query();
|
||||
@@ -135,7 +182,7 @@ test('update and delete', function () {
|
||||
equal(data.data[0].x, newVal);
|
||||
|
||||
// Test Delete
|
||||
data.delete(doc1);
|
||||
data.remove(doc1);
|
||||
equal(data.data.length, 5);
|
||||
equal(data.data[0].x, memoryData[1].x);
|
||||
});
|
||||
@@ -148,13 +195,23 @@ test('update and delete', function () {
|
||||
|
||||
module("Backend Memory - Model Integration");
|
||||
|
||||
var memoryFields = [
|
||||
{id: 'id'},
|
||||
{id: 'date', type: 'date'},
|
||||
{id: 'x', type: 'integer'},
|
||||
{id: 'y', type: 'integer'},
|
||||
{id: 'z', type: 'integer'},
|
||||
{id: 'country'},
|
||||
{id: 'label'}
|
||||
];
|
||||
|
||||
var memoryData = {
|
||||
metadata: {
|
||||
title: 'My Test Dataset'
|
||||
, name: '1-my-test-dataset'
|
||||
, id: 'test-dataset'
|
||||
},
|
||||
fields: [{id: 'x'}, {id: 'y'}, {id: 'z'}, {id: 'country'}, {id: 'label'}],
|
||||
fields: memoryFields,
|
||||
records: [
|
||||
{id: 0, x: 1, y: 2, z: 3, country: 'DE', label: 'first'}
|
||||
, {id: 1, x: 2, y: 4, z: 6, country: 'UK', label: 'second'}
|
||||
@@ -170,7 +227,7 @@ function makeBackendDataset() {
|
||||
id: 'test-dataset',
|
||||
title: 'My Test Dataset',
|
||||
name: '1-my-test-dataset',
|
||||
fields: [{id: 'date'}, {id: 'x'}, {id: 'y'}, {id: 'z'}, {id: 'country'}, {id: 'label'}],
|
||||
fields: memoryFields,
|
||||
records: [
|
||||
{id: 0, date: '2011-01-01', x: 1, y: 2, z: 3, country: 'DE', label: 'first'}
|
||||
, {id: 1, date: '2011-02-03', x: 2, y: 4, z: 6, country: 'UK', label: 'second'}
|
||||
@@ -216,7 +273,7 @@ test('query sort', function () {
|
||||
var data = dataset._store.data;
|
||||
var queryObj = {
|
||||
sort: [
|
||||
{'y': {order: 'desc'}}
|
||||
{field: 'y', order: 'desc'}
|
||||
]
|
||||
};
|
||||
dataset.query(queryObj).then(function() {
|
||||
@@ -234,28 +291,28 @@ test('query string', function () {
|
||||
});
|
||||
|
||||
dataset.query({q: 'UK 6'}).then(function() {
|
||||
equal(dataset.records.length, 1);
|
||||
equal(dataset.records.length, 2);
|
||||
deepEqual(dataset.records.models[0].id, 1);
|
||||
});
|
||||
});
|
||||
|
||||
test('filters', function () {
|
||||
var dataset = makeBackendDataset();
|
||||
dataset.queryState.addFilter({type: 'term', fieldType: 'string', field: 'country', term: 'UK'});
|
||||
dataset.queryState.addFilter({type: 'term', field: 'country', term: 'UK'});
|
||||
dataset.query().then(function() {
|
||||
equal(dataset.records.length, 3);
|
||||
deepEqual(dataset.records.pluck('country'), ['UK', 'UK', 'UK']);
|
||||
});
|
||||
|
||||
dataset = makeBackendDataset();
|
||||
dataset.queryState.addFilter({type: 'range', fieldType: 'date', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
|
||||
dataset.queryState.addFilter({type: 'range', field: 'date', start: '2011-01-01', stop: '2011-05-01'});
|
||||
dataset.query().then(function() {
|
||||
equal(dataset.records.length, 3);
|
||||
deepEqual(dataset.records.pluck('date'), ['2011-01-01','2011-02-03','2011-04-05']);
|
||||
});
|
||||
|
||||
dataset = makeBackendDataset();
|
||||
dataset.queryState.addFilter({type: 'range', fieldType: 'number', field: 'z', start: '0', stop: '10'});
|
||||
dataset.queryState.addFilter({type: 'range', field: 'z', start: '0', stop: '10'});
|
||||
dataset.query().then(function() {
|
||||
equal(dataset.records.length, 3);
|
||||
deepEqual(dataset.records.pluck('z'), [3,6,9]);
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
<link rel="stylesheet" href="../css/graph.css" type="text/css" media="screen" />
|
||||
|
||||
<script type="text/javascript" src="../vendor/jquery/1.7.1/jquery.js"></script>
|
||||
<script type="text/javascript" src="../vendor/underscore/1.1.6/underscore.js"></script>
|
||||
<script type="text/javascript" src="../vendor/backbone/0.5.1/backbone.js"></script>
|
||||
<script type="text/javascript" src="../vendor/underscore/1.4.2/underscore.js"></script>
|
||||
<script type="text/javascript" src="../vendor/backbone/0.9.2/backbone.js"></script>
|
||||
<script type="text/javascript" src="../vendor/jquery-ui-1.8.14.custom.min.js"></script>
|
||||
<script type="text/javascript" src="../vendor/jquery.flot/0.7/jquery.flot.js"></script>
|
||||
<script type="text/javascript" src="../vendor/jquery.mustache.js"></script>
|
||||
|
||||
@@ -1,23 +1,21 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
|
||||
"http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Qunit Tests</title>
|
||||
<link rel="stylesheet" href="qunit/qunit.css" type="text/css" media="screen" />
|
||||
<!-- need this stylesheet because flot will complain if canvas does not have a height -->
|
||||
<link rel="stylesheet" href="../css/graph.css" type="text/css" media="screen" />
|
||||
<link rel="stylesheet" href="../vendor/timeline/20120520/css/timeline.css" type="text/css" media="screen" />
|
||||
<link rel="stylesheet" href="../vendor/leaflet/0.3.1/leaflet.css">
|
||||
<link rel="stylesheet" href="../vendor/leaflet/0.4.4/leaflet.css">
|
||||
<link rel="stylesheet" href="../css/map.css">
|
||||
|
||||
<script type="text/javascript" src="../vendor/jquery/1.7.1/jquery.js"></script>
|
||||
<script type="text/javascript" src="../vendor/underscore/1.1.6/underscore.js"></script>
|
||||
<script type="text/javascript" src="../vendor/backbone/0.5.1/backbone.js"></script>
|
||||
<script type="text/javascript" src="../vendor/underscore/1.4.2/underscore.js"></script>
|
||||
<script type="text/javascript" src="../vendor/backbone/0.9.2/backbone.js"></script>
|
||||
<script type="text/javascript" src="../vendor/moment/1.6.2/moment.js"></script>
|
||||
<script type="text/javascript" src="../vendor/jquery.flot/0.7/jquery.flot.js"></script>
|
||||
<script type="text/javascript" src="../vendor/mustache/0.5.0-dev/mustache.js"></script>
|
||||
<script type="text/javascript" src="../vendor/bootstrap/2.0.2/bootstrap.js"></script>
|
||||
<script type="text/javascript" src="../vendor/leaflet/0.3.1/leaflet.js"></script>
|
||||
<script type="text/javascript" src="../vendor/leaflet/0.4.4/leaflet-src.js"></script>
|
||||
<script type="text/javascript" src="../vendor/leaflet.markercluster/leaflet.markercluster.js"></script>
|
||||
<script type="text/javascript" src="../vendor/slickgrid/2.0.1/jquery-ui-1.8.16.custom.min.js"></script>
|
||||
<script type="text/javascript" src="../vendor/slickgrid/2.0.1/jquery.event.drag-2.0.min.js"></script>
|
||||
<script type="text/javascript" src="../vendor/slickgrid/2.0.1/slick.grid.min.js"></script>
|
||||
|
||||
@@ -38,6 +38,28 @@ test('Field: basics', function () {
|
||||
equal('XX', out[0].label);
|
||||
});
|
||||
|
||||
test('Field: type mapping', function () {
|
||||
var tests = [
|
||||
{ input: 'text', exp: 'string'},
|
||||
{ input: 'int', exp: 'integer'},
|
||||
{ input: 'float', exp: 'number'},
|
||||
{ input: 'double', exp: 'number'},
|
||||
{ input: 'datetime', exp: 'date-time'},
|
||||
{ input: 'dateTime', exp: 'date-time'},
|
||||
{ input: 'bool', exp: 'boolean'},
|
||||
{ input: 'timestamp', exp: 'date-time'},
|
||||
{ input: 'json', exp: 'object'}
|
||||
];
|
||||
|
||||
_.each(tests, function(data) {
|
||||
var field = new recline.Model.Field({
|
||||
id: 'x',
|
||||
type: data.input
|
||||
});
|
||||
equal(field.get('type'), data.exp);
|
||||
});
|
||||
});
|
||||
|
||||
test('Field: default renderers', function () {
|
||||
var doc = new recline.Model.Record({
|
||||
x: 12.3,
|
||||
|
||||
@@ -32,9 +32,6 @@ test('basics', function () {
|
||||
$('.fixtures').append(view.el);
|
||||
view.render();
|
||||
|
||||
//Fire query, otherwise the map won't be initialized
|
||||
dataset.query();
|
||||
|
||||
assertPresent('.editor-field-type', view.elSidebar);
|
||||
|
||||
// Check that the Leaflet map was set up
|
||||
@@ -56,7 +53,8 @@ test('_setupGeometryField', function () {
|
||||
geomField: null,
|
||||
lonField: 'lon',
|
||||
latField: 'lat',
|
||||
autoZoom: true
|
||||
autoZoom: true,
|
||||
cluster: false
|
||||
};
|
||||
deepEqual(view.state.toJSON(), exp);
|
||||
deepEqual(view.menu.state.toJSON(), exp);
|
||||
@@ -95,9 +93,6 @@ test('GeoJSON geom field', function () {
|
||||
$('.fixtures').append(view.el);
|
||||
view.render();
|
||||
|
||||
//Fire query, otherwise the map won't be initialized
|
||||
dataset.query();
|
||||
|
||||
// Check that all features were created
|
||||
equal(_getFeaturesCount(view.features),3);
|
||||
|
||||
@@ -135,6 +130,30 @@ test('_getGeometryFromRecord non-GeoJSON', function () {
|
||||
});
|
||||
});
|
||||
|
||||
test('many markers', function () {
|
||||
var data = [];
|
||||
for (var i = 0; i<1000; i++) {
|
||||
data.push({ id: i, lon: 13+3*i, lat: 52+i/10});
|
||||
}
|
||||
var fields = [
|
||||
{id: 'id'},
|
||||
{id: 'lat'},
|
||||
{id: 'lon'}
|
||||
];
|
||||
|
||||
var dataset = new recline.Model.Dataset({records: data, fields: fields});
|
||||
var view = new recline.View.Map({
|
||||
model: dataset
|
||||
});
|
||||
$('.fixtures').append(view.el);
|
||||
view.render();
|
||||
|
||||
dataset.query();
|
||||
|
||||
equal(view.state.get('cluster'), true);
|
||||
view.remove();
|
||||
});
|
||||
|
||||
test('Popup', function () {
|
||||
var dataset = GeoJSONFixture.getDataset();
|
||||
var view = new recline.View.Map({
|
||||
@@ -143,9 +162,6 @@ test('Popup', function () {
|
||||
$('.fixtures').append(view.el);
|
||||
view.render();
|
||||
|
||||
//Fire query, otherwise the map won't be initialized
|
||||
dataset.query();
|
||||
|
||||
var marker = view.el.find('.leaflet-marker-icon').first();
|
||||
|
||||
assertPresent(marker);
|
||||
@@ -167,6 +183,30 @@ test('Popup', function () {
|
||||
view.remove();
|
||||
});
|
||||
|
||||
test('Popup - Custom', function () {
|
||||
var dataset = GeoJSONFixture.getDataset();
|
||||
var view = new recline.View.Map({
|
||||
model: dataset
|
||||
});
|
||||
$('.fixtures').append(view.el);
|
||||
view.infobox = function(record) {
|
||||
var html = Mustache.render('<h3>{{x}}</h3>y: {{y}}', record.toJSON());
|
||||
return html;
|
||||
};
|
||||
view.render();
|
||||
|
||||
var marker = view.el.find('.leaflet-marker-icon').first();
|
||||
_.values(view.features._layers)[0].fire('click');
|
||||
var popup = view.el.find('.leaflet-popup-content');
|
||||
|
||||
assertPresent(popup);
|
||||
|
||||
var text = popup.html();
|
||||
ok((text.indexOf('<h3>1</h3>y: 2') != -1))
|
||||
|
||||
view.remove();
|
||||
});
|
||||
|
||||
test('MapMenu', function () {
|
||||
var dataset = Fixture.getDataset();
|
||||
var controls = new recline.View.MapMenu({
|
||||
@@ -178,7 +218,7 @@ test('MapMenu', function () {
|
||||
|
||||
var _getFeaturesCount = function(features){
|
||||
var cnt = 0;
|
||||
features._iterateLayers(function(layer){
|
||||
_.each(features._layers, function(layer) {
|
||||
cnt++;
|
||||
});
|
||||
return cnt;
|
||||
|
||||
@@ -29,12 +29,32 @@ test('basics', function () {
|
||||
equal(dataset.queryState.attributes.filters[0].term, 'UK');
|
||||
equal(dataset.records.length, 3);
|
||||
|
||||
// now set a second range filter ...
|
||||
view.el.find('.js-add-filter').click();
|
||||
var $addForm = view.el.find('form.js-add');
|
||||
$addForm.find('select.fields').val('x');
|
||||
$addForm.find('select.filterType').val('range');
|
||||
$addForm.submit();
|
||||
|
||||
$editForm = view.el.find('form.js-edit');
|
||||
$editForm.find('.filter-range input').first().val('2');
|
||||
$editForm.find('.filter-range input').last().val('4');
|
||||
$editForm.submit();
|
||||
equal(dataset.queryState.attributes.filters[1].start, 2);
|
||||
equal(dataset.records.length, 2);
|
||||
|
||||
// now remove filter
|
||||
$editForm.find('.js-remove-filter').click();
|
||||
// hmmm, not working yet but works by eye!
|
||||
// $editForm = view.el.find('form.js-edit');
|
||||
// equal($editForm.find('.filter-term').length, 0)
|
||||
// equal(dataset.records.length, 6);
|
||||
$editForm = view.el.find('form.js-edit');
|
||||
$editForm.find('.js-remove-filter').last().click();
|
||||
$editForm = view.el.find('form.js-edit');
|
||||
equal($editForm.find('.filter').length, 1)
|
||||
equal(dataset.records.length, 3);
|
||||
|
||||
$editForm = view.el.find('form.js-edit');
|
||||
$editForm.find('.js-remove-filter').last().click();
|
||||
$editForm = view.el.find('form.js-edit');
|
||||
equal($editForm.find('.filter').length, 0)
|
||||
equal(dataset.records.length, 6);
|
||||
|
||||
view.remove();
|
||||
});
|
||||
@@ -56,7 +76,7 @@ test('geo_distance', function () {
|
||||
$editForm = view.el.find('form.js-edit');
|
||||
equal($editForm.find('.filter-geo_distance').length, 1)
|
||||
deepEqual(_.sortBy(_.keys(dataset.queryState.attributes.filters[0]),_.identity),
|
||||
["distance", "field", "fieldType", "point", "type", "unit"]);
|
||||
["distance", "field", "point", "type", "unit"]);
|
||||
|
||||
// now set filter value and apply
|
||||
$editForm.find('input[name="lat"]').val(10);
|
||||
|
||||
Reference in New Issue
Block a user