UNPKG

4.13 kBJavaScriptView Raw
1var server = require('../').server;
2var request = require('supertest');
3var assert = require('assert');
4var fs = require('fs');
5var validateTask = require('./validateTask');
6
7var tmpFiles = ['tmp1', 'tmp2', 'tmp3', 'tmp4', 'tmp5'];
8
9function cleanup() {
10 tmpFiles.forEach(function(path){
11 try {
12 //NO QUESTIONS
13 fs.unlinkSync(path);
14 } catch (err) {
15 //NOTHING TO SEE HERE
16 }
17 });
18}
19cleanup();
20process.on('exit', cleanup);
21
22describe('A server', function(){
23 describe('just after startup, GET /tasks', function(){
24 it('should respond with empty json', function(done){
25 request(server())
26 .get('/tasks')
27 .set('Accept', 'application/json')
28 .expect('Content-Type', /json/)
29 .expect(200)
30 .expect({}, done);
31 });
32 });
33
34 describe('just after startup, GET /tasks/1', function(){
35 it('should 404', function(done){
36 request(server())
37 .get('/tasks/1')
38 .expect(404, done);
39 });
40 });
41
42 describe('with a newly created task', function(){
43 var app = server();
44 var createdTask;
45
46 it('should respond with a task object', function(done){
47 request(app)
48 .post('/tasks')
49 .send({})
50 .set('Accept', 'application/json')
51 .expect('Content-Type', /json/)
52 .expect(200)
53 .end(function(err, res){
54 if (err) {
55 return done(err);
56 }
57
58 createdTask = res.body;
59
60 validateTask(createdTask);
61
62 done();
63 });
64 });
65
66 it('should create GET /tasks/:pid', function(done){
67 request(app)
68 .get('/tasks/'+createdTask.pid)
69 .set('Accept', 'application/json')
70 .expect('Content-Type', /json/)
71 .expect(200)
72 .end(function(err, res){
73 if (err) {
74 return done(err);
75 }
76
77 var task = res.body;
78
79 validateTask(task);
80
81 assert.deepEqual(createdTask, task);
82
83 done();
84 });
85 });
86
87 it('should be accessible in GET /tasks', function(done){
88 request(app)
89 .get('/tasks')
90 .set('Accept', 'application/json')
91 .expect('Content-Type', /json/)
92 .expect(200)
93 .end(function(err, res){
94 if (err) {
95 return done(err);
96 }
97
98 var tasks = res.body;
99
100 assert.deepEqual(Object.keys(tasks), [createdTask.pid]);
101
102 validateTask(tasks[createdTask.pid]);
103
104 assert.deepEqual(createdTask, tasks[createdTask.pid]);
105
106 done();
107 });
108 });
109
110 it('should be appendable', function(done){
111 request(app)
112 .post('/tasks/'+createdTask.pid)
113 .send({commands: ['touch '+tmpFiles[0], 'touch '+tmpFiles[1]]})
114 .set('Accept', 'application/json')
115 .expect('Content-Type', /json/)
116 .expect(200)
117 .end(function(err, res){
118 if (err) {
119 return done(err);
120 }
121
122 var task = res.body;
123
124 validateTask(task);
125
126 assert.deepEqual(createdTask, task);
127
128 var interval = setInterval(function(){
129 try {
130 fs.accessSync(process.cwd()+'/'+tmpFiles[0]);
131 fs.accessSync(process.cwd()+'/'+tmpFiles[1]);
132 clearInterval(interval);
133 clearTimeout(timeout);
134 done();
135 } catch (err) {
136 //:(
137 }
138 });
139
140 var timeout = setTimeout(function(){
141 clearInterval(interval);
142 done(new Error('command was not run within 500ms'));
143 }, 500);
144 });
145 });
146
147 it('should be deletable', function(done){
148 request(app)
149 .delete('/tasks/'+createdTask.pid)
150 .expect(200, done);
151 });
152
153 it('should be gone after it\'s deleted', function(done){
154 request(app)
155 .get('/tasks/'+createdTask.pid)
156 .expect(404, done);
157 });
158
159 it('should be gone after it\'s deleted', function(done){
160 request(app)
161 .get('/tasks')
162 .set('Accept', 'application/json')
163 .expect('Content-Type', /json/)
164 .expect(200)
165 .expect({}, done);
166 });
167 });
168});