UNPKG

4.51 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 if (typeof fs.existsSync === 'function') {
130 if (fs.existsSync(process.cwd()+'/'+tmpFiles[0]) && fs.existsSync(process.cwd()+'/'+tmpFiles[1])) {
131 clearInterval(interval);
132 clearTimeout(timeout);
133 done();
134 }
135 } else {
136 try {
137 fs.accessSync(process.cwd()+'/'+tmpFiles[0]);
138 fs.accessSync(process.cwd()+'/'+tmpFiles[1]);
139 clearInterval(interval);
140 clearTimeout(timeout);
141 done();
142 } catch (err) {
143 //:(
144 }
145 }
146 });
147
148 var timeout = setTimeout(function(){
149 clearInterval(interval);
150 done(new Error('command was not run within 500ms'));
151 }, 500);
152 });
153 });
154
155 it('should be deletable', function(done){
156 request(app)
157 .delete('/tasks/'+createdTask.pid)
158 .expect(200, done);
159 });
160
161 it('should be gone from GET /task/:pid after it\'s deleted', function(done){
162 request(app)
163 .get('/tasks/'+createdTask.pid)
164 .expect(404, done);
165 });
166
167 it('should be gone from GET /tasks after it\'s deleted', function(done){
168 request(app)
169 .get('/tasks')
170 .set('Accept', 'application/json')
171 .expect('Content-Type', /json/)
172 .expect(200)
173 .expect({}, done);
174 });
175 });
176});