UNPKG

5.13 kBtext/coffeescriptView Raw
1assert = require('chai').assert
2MongoClient = require('mongodb').MongoClient
3
4MapPLZ = require '../mapplz'
5mapstore = new MapPLZ.MapPLZ
6collected = null
7
8connect = (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
43describe '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
119describe '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 )