1 | assert = require('chai').assert
|
2 | pg = require 'pg'
|
3 |
|
4 | MapPLZ = require '../mapplz'
|
5 | mapstore = new MapPLZ.MapPLZ
|
6 |
|
7 | connString = "postgres://postgres:@localhost/travis_postgis"
|
8 |
|
9 |
|
10 | connect = (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 |
|
26 | describe '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 |
|
101 | describe '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 | )
|