UNPKG

4.8 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/notes/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 notes', 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/notes/';
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//Tests for invalid queries
93// test('get note that does not exist', function(assert) {
94// get('/api/v1/notes/123456789', function(err, body, res) {
95// assert.ifError(err, 'success');
96// assert.deepEqual(JSON.parse(body), { message: 'Not found: Note not found' }, 'expected error message');
97// assert.equal(res.statusCode, 404, 'expected status');
98// assert.end();
99// });
100// });
101
102// test('get invalid note id', function(assert) {
103// get('/api/v1/notes/bananas', function(err, body, res) {
104// assert.ifError(err, 'success');
105// assert.deepEqual(JSON.parse(body), { message: 'Invalid request: Note id must be a number' }, 'expected error message');
106// assert.equal(res.statusCode, 422, 'expected status');
107// assert.end();
108// });
109// });
110
111test('get results for invalid from date', function(assert) {
112 get('/api/v1/notes?from=strings&to=2015-09-08', function(err, body, res) {
113 assert.ifError(err, 'success');
114 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: From must be a valid date' }, 'expected error message');
115 assert.equal(res.statusCode, 422, 'expected status');
116 assert.end();
117 });
118});
119
120test('get results for invalid to date', function(assert) {
121 get('/api/v1/notes?from=2015-09-08&to=strings', function(err, body, res) {
122 assert.ifError(err, 'success');
123 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: To must be a valid date' }, 'expected error message');
124 assert.equal(res.statusCode, 422, 'expected status');
125 assert.end();
126 });
127});
128
129test('get results for invalid bounding box', function(assert) {
130 get('/api/v1/notes?bbox=a,1,2,3', function(err, body, res) {
131 assert.ifError(err, 'success');
132 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: Bbox not a valid bbox string' }, 'expected error message');
133 assert.equal(res.statusCode, 422, 'expected status');
134 assert.end();
135 });
136});
137
138tape('close server', function(assert) {
139 server.close(function(err) {
140 if (err) throw err;
141 assert.pass('server closed');
142 assert.end();
143 process.exit(0);
144 });
145});