1 | assert = require('chai').assert
|
2 | MongoClient = require('mongodb').MongoClient
|
3 |
|
4 | MapPLZ = require '../mapplz'
|
5 | mapstore = new MapPLZ.MapPLZ
|
6 | collected = null
|
7 |
|
8 | connect = (callback) ->
|
9 | if collected
|
10 | collected.remove {}, (err) ->
|
11 | if err
|
12 | console.error 'collection clear error'
|
13 | assert.equal(err, null)
|
14 | else
|
15 | callback()
|
16 | return
|
17 |
|
18 | MongoClient.connect "mongodb://localhost:27017/sample", (err, db) ->
|
19 | if err
|
20 | console.error 'error connecting to MongoDB'
|
21 | assert.equal(err, null)
|
22 | else
|
23 | db.collection 'mapplz', (err, collection) ->
|
24 | if err
|
25 | console.error 'collection error'
|
26 | assert.equal(err, null)
|
27 | else
|
28 | collection.remove {}, (err) ->
|
29 | if err
|
30 | console.error 'collection clear error'
|
31 | assert.equal(err, null)
|
32 |
|
33 | collection.ensureIndex { geo: "2dsphere" }, (err) ->
|
34 | if err
|
35 | console.error 'index error'
|
36 | assert.equal(err, null)
|
37 |
|
38 | mapstore.database = new MapPLZ.MongoDB
|
39 | mapstore.database.collection = collection
|
40 | collected = collection
|
41 | callback()
|
42 |
|
43 | describe 'queries db', ->
|
44 | it 'returns count', (done) ->
|
45 | connect ->
|
46 | assert.equal(mapstore.database == null, false)
|
47 | mapstore.add([0, 1], (err, pt) ->
|
48 | mapstore.add([2, 3, 'hello world'], (err, pt2) ->
|
49 | mapstore.add({ lat: 4, lng: 5, label: 'hello world' }, (err, pt3) ->
|
50 | mapstore.add({ path: [[5, 10], [15, 20]], label: 'hello world' }, (err, line) ->
|
51 | assert.equal(line.toWKT(), 'LINESTRING(10 5, 20 15)')
|
52 | mapstore.count("", (err, count) ->
|
53 | assert.equal(count, 4)
|
54 | done()
|
55 | )
|
56 | )
|
57 | )
|
58 | )
|
59 | )
|
60 |
|
61 | it 'deletes a point', (done) ->
|
62 | connect ->
|
63 | mapstore.add(40, -70, (err, pt) ->
|
64 | pt.delete ->
|
65 | mapstore.count(null, (err, count) ->
|
66 | assert.equal(err, null)
|
67 | assert.equal(count, 0)
|
68 | done()
|
69 | )
|
70 | )
|
71 |
|
72 | it 'queries by property', (done) ->
|
73 | connect ->
|
74 | assert.equal(mapstore.database == null, false)
|
75 | mapstore.add({ lat: 2, lng: 3, color: 'blue' }, (err, pt) ->
|
76 | mapstore.add({ lat: 2, lng: 3, color: 'red' }, (err, pt2) ->
|
77 | mapstore.query({ color: "blue" }, (err, results) ->
|
78 | assert.equal(results.length, 1)
|
79 | assert.equal(results[0].properties.color, "blue")
|
80 | done()
|
81 | )
|
82 | )
|
83 | )
|
84 |
|
85 | it 'counts by property', (done) ->
|
86 | connect ->
|
87 | assert.equal(mapstore.database == null, false)
|
88 | mapstore.add({ lat: 2, lng: 3, color: 'blue' }, (err, pt) ->
|
89 | mapstore.add({ lat: 2, lng: 3, color: 'red' }, (err, pt2) ->
|
90 | mapstore.count({ color: "blue" }, (err, count) ->
|
91 | assert.equal(count, 1)
|
92 | done()
|
93 | )
|
94 | )
|
95 | )
|
96 |
|
97 | it 'finds nearest point', (done) ->
|
98 | connect ->
|
99 | mapstore.add { lat: 40, lng: -70 }, (err, pt) ->
|
100 | mapstore.add { lat: 35, lng: 110 }, (err, pt2) ->
|
101 | mapstore.near [30, -60], 1, (err, nearest) ->
|
102 | assert.equal(nearest.length, 1)
|
103 | response = nearest[0]
|
104 | assert.equal(response.lat, 40)
|
105 | assert.equal(response.lng, -70)
|
106 | done()
|
107 |
|
108 | it 'finds point in polygon', (done) ->
|
109 | connect ->
|
110 | mapstore.add { lat: 40, lng: -70 }, (err, pt) ->
|
111 | mapstore.add { lat: 35, lng: 110 }, (err, pt2) ->
|
112 | mapstore.inside [[[38, -72], [38, -68], [42, -68], [42, -72], [38, -72]]], (err, within) ->
|
113 | assert.equal(within.length, 1)
|
114 | response = within[0]
|
115 | assert.equal(response.lat, 40)
|
116 | assert.equal(response.lng, -70)
|
117 | done()
|
118 |
|
119 | describe 'saves to db', ->
|
120 | it 'saves properties to db', (done) ->
|
121 | connect ->
|
122 | assert.equal(mapstore.database == null, false)
|
123 | mapstore.add({ lat: 2, lng: 3, label: 'hello world' }, (err, pt) ->
|
124 | mapstore.query("", (err, results) ->
|
125 | firstpt = results[0]
|
126 | assert.equal(firstpt.lat, 2)
|
127 | assert.equal(firstpt.lng, 3)
|
128 | assert.equal(firstpt.type, 'point')
|
129 | assert.equal(firstpt.properties.label, 'hello world')
|
130 | done()
|
131 | )
|
132 | )
|
133 |
|
134 | it 'updates properties in db', (done) ->
|
135 | connect ->
|
136 | assert.equal(mapstore.database == null, false)
|
137 | mapstore.add({ lat: 2, lng: 3, label: 'hello' }, (err, pt) ->
|
138 | pt.properties.label = 'world'
|
139 | pt.save (err, ptnew) ->
|
140 | mapstore.query("", (err, results) ->
|
141 | assert.equal(results.length, 1)
|
142 | assert.equal(results[0].properties.label, 'world')
|
143 | done()
|
144 | )
|
145 | )
|
146 |
|
147 | it 'updates locations in db', (done) ->
|
148 | connect ->
|
149 | assert.equal(mapstore.database == null, false)
|
150 | mapstore.add({ lat: 2, lng: 3 }, (err, pt) ->
|
151 | pt.lat = 5
|
152 | pt.save (err, ptnew) ->
|
153 | mapstore.query("", (err, results) ->
|
154 | assert.equal(results.length, 1)
|
155 | assert.equal(results[0].lat, 5)
|
156 | done()
|
157 | )
|
158 | )
|