UNPKG

4.7 kBtext/coffeescriptView Raw
1assert = require('chai').assert
2pg = require 'pg'
3
4MapPLZ = require '../mapplz'
5mapstore = new MapPLZ.MapPLZ
6
7connString = "postgres://postgres:@localhost/travis_postgis"
8
9
10connect = (callback) ->
11 pg.connect connString, (err, client, done) ->
12 if err
13 console.error 'error connecting to PostgreSQL'
14 assert.equal(err, null)
15 else
16 mapstore.database = new MapPLZ.PostGIS
17 mapstore.database.client = client
18 client.query 'DROP TABLE IF EXISTS mapplz', (err, result) ->
19 console.error err if err
20 client.query 'CREATE TABLE mapplz (id SERIAL PRIMARY KEY, properties JSON, geom public.geometry)', (err, result) ->
21 if err
22 console.error 'error creating table'
23 assert.equal(err, null)
24 callback()
25
26describe 'queries db', ->
27 it 'returns count', (done) ->
28 connect ->
29 assert.equal(mapstore.database == null, false)
30 mapstore.add([0, 1], (err, pts) ->
31 mapstore.add([2, 3, 'hello world'], (err, pt) ->
32 mapstore.add({ lat: 4, lng: 5, label: 'hello world' }, (err, pt2) ->
33 mapstore.add({ path: [[5, 10], [15, 20]], label: 'hello world' }, (err, line) ->
34 assert.equal(line.toWKT(), 'LINESTRING(10 5, 20 15)')
35 mapstore.count(null, (err, count) ->
36 assert.equal(count, 4)
37 done()
38 )
39 )
40 )
41 )
42 )
43
44 it 'deletes a point', (done) ->
45 connect ->
46 mapstore.add(40, -70, (err, pt) ->
47 pt.delete ->
48 mapstore.count(null, (err, count) ->
49 assert.equal(count, 0)
50 done()
51 )
52 )
53
54 it 'queries by property', (done) ->
55 connect ->
56 assert.equal(mapstore.database == null, false)
57 mapstore.add({ lat: 2, lng: 3, color: 'blue' }, (err, pt) ->
58 mapstore.add({ lat: 2, lng: 3, color: 'red' }, (err, pt2) ->
59 mapstore.query("color = 'blue'", (err, results) ->
60 assert.equal(results.length, 1)
61 assert.equal(results[0].properties.color, "blue")
62 done()
63 )
64 )
65 )
66
67 it 'counts by property', (done) ->
68 connect ->
69 assert.equal(mapstore.database == null, false)
70 mapstore.add({ lat: 2, lng: 3, color: 'blue' }, (err, pt) ->
71 mapstore.add({ lat: 2, lng: 3, color: 'red' }, (err, pt2) ->
72 mapstore.count("color = 'blue'", (err, count) ->
73 assert.equal(count, 1)
74 done()
75 )
76 )
77 )
78
79 it 'finds nearest point', (done) ->
80 connect ->
81 mapstore.add { lat: 40, lng: -70 }, (err, pt) ->
82 mapstore.add { lat: 35, lng: 110 }, (err, pt2) ->
83 mapstore.near [30, -60], 1, (err, nearest) ->
84 assert.equal(nearest.length, 1)
85 response = nearest[0]
86 assert.equal(response.lat, 40)
87 assert.equal(response.lng, -70)
88 done()
89
90 it 'finds point in polygon', (done) ->
91 connect ->
92 mapstore.add { lat: 40, lng: -70 }, (err, pt) ->
93 mapstore.add { lat: 35, lng: 110 }, (err, pt2) ->
94 mapstore.inside [[[38, -72], [38, -68], [42, -68], [42, -72], [38, -72]]], (err, within) ->
95 assert.equal(within.length, 1)
96 response = within[0]
97 assert.equal(response.lat, 40)
98 assert.equal(response.lng, -70)
99 done()
100
101describe 'saves to db', ->
102 it 'saves properties to db', (done) ->
103 connect ->
104 assert.equal(mapstore.database == null, false)
105 mapstore.add({ lat: 2, lng: 3, label: 'hello world' }, (err, pt) ->
106 mapstore.query("", (err, results) ->
107 firstpt = results[0]
108 assert.equal(firstpt.lat, 2)
109 assert.equal(firstpt.lng, 3)
110 assert.equal(firstpt.type, 'point')
111 assert.equal(firstpt.properties.label, 'hello world')
112 done()
113 )
114 )
115
116 it 'updates properties in db', (done) ->
117 connect ->
118 assert.equal(mapstore.database == null, false)
119 mapstore.add({ lat: 2, lng: 3, label: 'hello' }, (err, pt) ->
120 pt.properties.label = 'world'
121 pt.save (err, ptnew) ->
122 mapstore.query("", (err, results) ->
123 assert.equal(results.length, 1)
124 assert.equal(results[0].properties.label, 'world')
125 done()
126 )
127 )
128
129 it 'updates locations in db', (done) ->
130 connect ->
131 assert.equal(mapstore.database == null, false)
132 mapstore.add({ lat: 2, lng: 3 }, (err, pt) ->
133 pt.lat = 5
134 pt.save (err, ptnew) ->
135 mapstore.query("", (err, results) ->
136 assert.equal(results.length, 1)
137 assert.equal(results[0].lat, 5)
138 done()
139 )
140 )