UNPKG

3.77 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 queue = require('d3-queue').queue;
6var http = require('http');
7var testsList = require('./fixtures/notes/test_list.json');
8var server;
9// Simple GET function
10function get(path, callback) {
11 http.get('http://localhost:20009' + path, function(res) {
12 var body = '';
13 res.on('error', callback);
14 res.on('data', function(d) { body += d; });
15 res.on('end', function() {
16 callback(null, body, res);
17 });
18 }).on('error', callback);
19}
20
21tape('start server', function(assert) {
22 server = api.listen(20009, function(err) {
23 if (err) throw err;
24 assert.pass('server listening on 20009');
25 assert.end();
26 });
27});
28
29tape('run API tests for notes', function(assert) {
30 var q = queue(5);
31 testsList.forEach(function(t) {
32 q.defer(runAPITest, assert, t);
33 });
34 q.awaitAll(function() {
35 assert.end();
36 });
37});
38
39function runAPITest(assert, testObj, callback) {
40 var basePath = './fixtures/notes/';
41 var expected = require(basePath + testObj.fixture);
42 get(testObj.url, function(err, body, res) {
43 assert.ifError(err, testObj.description + ': success');
44 assert.equal(res.statusCode, 200, testObj.description + ': status 200');
45 assert.deepEqual(JSON.parse(body), expected.geojson, testObj.description);
46 callback();
47 });
48}
49
50//Tests for invalid queries
51// test('get note that does not exist', function(assert) {
52// get('/api/v1/notes/123456789', function(err, body, res) {
53// assert.ifError(err, 'success');
54// assert.deepEqual(JSON.parse(body), { message: 'Not found: Note not found' }, 'expected error message');
55// assert.equal(res.statusCode, 404, 'expected status');
56// assert.end();
57// });
58// });
59
60// test('get invalid note id', function(assert) {
61// get('/api/v1/notes/bananas', function(err, body, res) {
62// assert.ifError(err, 'success');
63// assert.deepEqual(JSON.parse(body), { message: 'Invalid request: Note id must be a number' }, 'expected error message');
64// assert.equal(res.statusCode, 422, 'expected status');
65// assert.end();
66// });
67// });
68
69tape('get results for invalid from date', function(assert) {
70 get('/api/v1/notes?from=strings&to=2015-09-08', function(err, body, res) {
71 assert.ifError(err, 'success');
72 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: From must be a valid date' }, 'expected error message');
73 assert.equal(res.statusCode, 422, 'expected status');
74 assert.end();
75 });
76});
77
78tape('get results for invalid to date', function(assert) {
79 get('/api/v1/notes?from=2015-09-08&to=strings', function(err, body, res) {
80 assert.ifError(err, 'success');
81 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: To must be a valid date' }, 'expected error message');
82 assert.equal(res.statusCode, 422, 'expected status');
83 assert.end();
84 });
85});
86
87tape('get results for invalid bounding box', function(assert) {
88 get('/api/v1/notes?bbox=a,1,2,3', function(err, body, res) {
89 assert.ifError(err, 'success');
90 assert.deepEqual(JSON.parse(body), { message: 'Invalid request: Bbox not a valid bbox string' }, 'expected error message');
91 assert.equal(res.statusCode, 422, 'expected status');
92 assert.end();
93 });
94});
95
96tape('close server', function(assert) {
97 server.close(function(err) {
98 if (err) throw err;
99 assert.pass('server closed');
100 assert.end();
101 });
102});
103
104tape.onFinish(() => process.exit(0));