UNPKG

4.87 kBJavaScriptView Raw
1process.env.OSM_COMMENTS_POSTGRES_URL = 'postgres://' + process.env.TEST_PG_USER + '@localhost/osm-comments-api-test';
2
3var api = require('../api');
4var tape = require('tape');
5var exec = require('child_process').exec;
6var queue = require('d3-queue').queue;
7var path = require('path');
8var http = require('http');
9var db = path.resolve(__dirname, 'db.sh');
10var testsList = require('./fixtures/changesets/test_list.json');
11var server;
12
13// Simple GET function
14function get(path, callback) {
15 http.get('http://localhost:20009' + path, function(res) {
16 var body = '';
17 res.on('error', callback);
18 res.on('data', function(d) { body += d; });
19 res.on('end', function() {
20 callback(null, body, res);
21 });
22 }).on('error', callback);
23}
24
25// Wrapper to provide database isolation between tests
26function test(name, options, callback) {
27 if (typeof options === 'function') {
28 callback = options;
29 options = undefined;
30 }
31
32 tape(name, options, function(assert) {
33 var end = assert.end.bind(assert);
34 var q = queue(1);
35
36 q.defer(exec, db + ' before');
37 q.defer(function(next) {
38 assert.end = next;
39 callback(assert);
40 });
41 q.defer(exec, db + ' after');
42 q.awaitAll(function(err) {
43 if (err) return end(err);
44 end();
45 });
46 });
47}
48
49tape('drop db', function(assert) {
50 exec('dropdb osm-comments-api-test || :', function(err) {
51 if (err) throw err;
52 assert.end();
53 });
54});
55
56tape('create db', function(assert) {
57 exec('createdb osm-comments-api-test', function(err) {
58 if (err) throw err;
59 assert.end();
60 });
61});
62
63tape('start server', function(assert) {
64 server = api.listen(20009, function(err) {
65 if (err) throw err;
66 assert.pass('server listening on 20009');
67 assert.end();
68 });
69});
70
71test('run API tests for changesets', function(assert) {
72 var q = queue(5);
73 testsList.forEach(function(t) {
74 q.defer(runAPITest, assert, t);
75 });
76 q.awaitAll(function() {
77 assert.end();
78 });
79});
80
81function runAPITest(assert, testObj, callback) {
82 var basePath = './fixtures/changesets/';
83 var expected = require(basePath + testObj.fixture);
84 get(testObj.url, function(err, body, res) {
85 assert.ifError(err, testObj.description + ': success');
86 assert.equal(res.statusCode, 200, testObj.description + ': status 200');
87 assert.deepEqual(JSON.parse(body), expected.geojson, testObj.description);
88 callback();
89 });
90}
91
92
93//Tests for invalid queries
94// test('get changeset that does not exist', function(assert) {
95// get('/api/v1/changesets/123456789', function(err, body, res) {
96// assert.ifError(err, 'success');
97// assert.deepEqual(JSON.parse(body), { message: 'Not found: Changeset not found' }, 'expected error message');
98// assert.equal(res.statusCode, 404, 'expected status');
99// assert.end();
100// });
101// });
102
103// test('get invalid changeset id', function(assert) {
104// get('/api/v1/changesets/ventriloquism', function(err, body, res) {
105// assert.ifError(err, 'success');
106// assert.deepEqual(JSON.parse(body), { message: 'Invalid request: Changeset id must be a number' }, 'expected error message');
107// assert.equal(res.statusCode, 422, 'expected status');
108// assert.end();
109// });
110// });
111
112test('get results for invalid from date', function(assert) {
113 get('/api/v1/changesets?from=strings&to=2015-09-08', function(err, body, res) {
114 assert.ifError(err, 'success');
115 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: From must be a valid date' }, 'expected error message');
116 assert.equal(res.statusCode, 422, 'expected status');
117 assert.end();
118 });
119});
120
121test('get results for invalid to date', function(assert) {
122 get('/api/v1/changesets?from=2015-09-08&to=strings', function(err, body, res) {
123 assert.ifError(err, 'success');
124 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: To must be a valid date' }, 'expected error message');
125 assert.equal(res.statusCode, 422, 'expected status');
126 assert.end();
127 });
128});
129
130test('get results for invalid bounding box', function(assert) {
131 get('/api/v1/changesets?bbox=a,1,2,3', function(err, body, res) {
132 assert.ifError(err, 'success');
133 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: Bbox not a valid bbox string' }, 'expected error message');
134 assert.equal(res.statusCode, 422, 'expected status');
135 assert.end();
136 });
137});
138
139tape('close server', function(assert) {
140 server.close(function(err) {
141 if (err) throw err;
142 assert.pass('server closed');
143 assert.end();
144 process.exit(0);
145 });
146});