@@ -7,6 +7,7 @@ import app from "../../server";
7
7
import cleanDb from "../utils/cleanDb" ;
8
8
import authService from "../../services/authService" ;
9
9
import userDataFixture from "../fixtures/user/user" ;
10
+ import sinon from "sinon" ;
10
11
const cookieName = config . get ( "userToken.cookieName" ) ;
11
12
import addUser from "../utils/addUser" ;
12
13
import {
@@ -26,9 +27,15 @@ import {
26
27
REQUEST_ALREADY_PENDING ,
27
28
REQUEST_REJECTED_SUCCESSFULLY ,
28
29
REQUEST_ALREADY_REJECTED ,
30
+ // UNAUTHORIZED_TO_CREATE_OOO_REQUEST,
31
+ // USER_STATUS_NOT_FOUND,
32
+ // OOO_STATUS_ALREADY_EXIST,
29
33
} from "../../constants/requests" ;
30
34
import { updateTask } from "../../models/tasks" ;
31
35
import { validTaskAssignmentRequest , validTaskCreqtionRequest } from "../fixtures/taskRequests/taskRequests" ;
36
+ import { deleteUserStatus , updateUserStatus } from "../../models/userStatus" ;
37
+ import * as requestsQuery from "../../models/requests" ;
38
+ import { userState } from "../../constants/userStatus" ;
32
39
33
40
const userData = userDataFixture ( ) ;
34
41
chai . use ( chaiHttp ) ;
@@ -41,12 +48,17 @@ let approvedOooRequestId: string;
41
48
let oooRequestData : any ;
42
49
let oooRequestData2 : any ;
43
50
let testUserId : string ;
51
+ let testArchivedUserId : string ;
44
52
45
53
describe ( "/requests OOO" , function ( ) {
54
+
55
+ const requestsEndpoint : string = "/requests?dev=true" ;
56
+
46
57
beforeEach ( async function ( ) {
47
- const userIdPromises = [ addUser ( userData [ 16 ] ) , addUser ( userData [ 4 ] ) ] ;
48
- const [ userId , superUserId ] = await Promise . all ( userIdPromises ) ;
58
+ const userIdPromises = [ addUser ( userData [ 16 ] ) , addUser ( userData [ 4 ] ) , addUser ( userData [ 18 ] ) ] ;
59
+ const [ userId , superUserId , archivedUserId ] = await Promise . all ( userIdPromises ) ;
49
60
testUserId = userId ;
61
+ testArchivedUserId = archivedUserId ;
50
62
51
63
oooRequestData = { ...createOooRequests , requestedBy : userId } ;
52
64
oooRequestData2 = { ...createOooRequests2 , requestedBy : superUserId } ;
@@ -69,137 +81,239 @@ describe("/requests OOO", function () {
69
81
} ) ;
70
82
71
83
afterEach ( async function ( ) {
84
+ sinon . restore ( ) ;
72
85
await cleanDb ( ) ;
73
86
} ) ;
74
87
75
88
describe ( "POST /requests" , function ( ) {
89
+
76
90
beforeEach ( async function ( ) {
77
91
const userIdPromises = [ addUser ( userData [ 16 ] ) ] ;
78
92
const [ userId ] = await Promise . all ( userIdPromises ) ;
79
93
80
94
authToken = authService . generateAuthToken ( { userId } ) ;
95
+
96
+ const testUserStatus = {
97
+ currentStatus : {
98
+ state : userState . ACTIVE
99
+ }
100
+ } ;
101
+
102
+ await updateUserStatus ( userId , testUserStatus ) ;
81
103
} ) ;
82
104
83
105
afterEach ( async function ( ) {
84
106
await cleanDb ( ) ;
85
107
} ) ;
86
108
109
+ it . skip ( "should return 501 and 'Feature not implemented' message when dev is false" , function ( done ) {
110
+ chai
111
+ . request ( app )
112
+ . post ( "/requests?dev=false" )
113
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
114
+ . send ( validOooStatusRequests )
115
+ . end ( function ( err , res ) {
116
+ if ( err ) {
117
+ return done ( err ) ;
118
+ }
119
+ expect ( res . statusCode ) . to . equal ( 501 ) ;
120
+ expect ( res . body . message ) . to . equal ( "Feature not implemented" ) ;
121
+ done ( ) ;
122
+ } ) ;
123
+ } ) ;
124
+
87
125
it ( "should return 401 if user is not logged in" , function ( done ) {
88
126
chai
89
127
. request ( app )
90
- . post ( "/requests" )
128
+ . post ( requestsEndpoint )
91
129
. send ( validOooStatusRequests )
92
130
. end ( function ( err , res ) {
93
131
expect ( res ) . to . have . status ( 401 ) ;
132
+ expect ( res . body . error ) . to . equal ( "Unauthorized" ) ;
133
+ expect ( res . body . message ) . to . equal ( "Unauthenticated User" ) ;
94
134
done ( ) ;
95
135
} ) ;
96
136
} ) ;
97
137
98
- it ( "should create a new request" , function ( done ) {
138
+ it . skip ( "should return 403 if user is not part of discord" , function ( done ) {
139
+ const authTokenForArchivedUserId = authService . generateAuthToken (
140
+ { userId : testArchivedUserId }
141
+ ) ;
99
142
chai
100
143
. request ( app )
101
- . post ( "/requests" )
102
- . set ( "cookie" , `${ cookieName } =${ authToken } ` )
144
+ . post ( requestsEndpoint )
145
+ . set ( "cookie" , `${ cookieName } =${ authTokenForArchivedUserId } ` )
103
146
. send ( validOooStatusRequests )
104
147
. end ( function ( err , res ) {
105
- expect ( res ) . to . have . status ( 201 ) ;
106
- expect ( res . body ) . to . have . property ( "message ") ;
107
- expect ( res . body . message ) . to . equal ( REQUEST_CREATED_SUCCESSFULLY ) ;
148
+ expect ( res ) . to . have . status ( 403 ) ;
149
+ expect ( res . body . error ) . to . equal ( "Forbidden ") ;
150
+ // expect(res.body.message).to.equal(UNAUTHORIZED_TO_CREATE_OOO_REQUEST );
108
151
done ( ) ;
109
152
} ) ;
110
153
} ) ;
111
154
112
- it ( "should return 400, if already created request is created again" , async function ( ) {
113
- await chai
114
- . request ( app )
115
- . post ( "/requests" )
116
- . set ( "cookie" , `${ cookieName } =${ authToken } ` )
117
- . send ( validOooStatusRequests ) ;
118
- const response = await chai
119
- . request ( app )
120
- . post ( "/requests" )
155
+ it ( "should return 500 response when creating OOO request fails" , function ( done ) {
156
+ sinon . stub ( requestsQuery , "createRequest" )
157
+ . throws ( "Error while creating OOO request" ) ;
158
+ chai . request ( app )
159
+ . post ( requestsEndpoint )
121
160
. set ( "cookie" , `${ cookieName } =${ authToken } ` )
122
- . send ( validOooStatusRequests ) ;
123
- expect ( response ) . to . have . status ( 400 ) ;
124
- expect ( response . body ) . to . have . property ( "message" ) ;
125
- expect ( response . body . message ) . to . equal ( REQUEST_ALREADY_PENDING ) ;
161
+ . send ( validOooStatusRequests )
162
+ . end ( function ( err , res ) {
163
+ if ( err ) return done ( err ) ;
164
+ expect ( res . statusCode ) . to . equal ( 500 ) ;
165
+ expect ( res . body . message ) . to . equal ( "An internal server error occurred" ) ;
166
+ done ( ) ;
167
+ } ) ;
126
168
} ) ;
127
169
128
- it ( "should create a new request and have all the required fields in the response " , function ( done ) {
170
+ it . skip ( "should create a new request when dev is true " , function ( done ) {
129
171
chai
130
172
. request ( app )
131
- . post ( "/requests" )
173
+ . post ( requestsEndpoint )
132
174
. set ( "cookie" , `${ cookieName } =${ authToken } ` )
133
175
. send ( validOooStatusRequests )
134
- . end ( function ( err , res ) {
176
+ . end ( async function ( err , res ) {
177
+ if ( err ) return done ( err ) ;
135
178
expect ( res ) . to . have . status ( 201 ) ;
136
179
expect ( res . body ) . to . have . property ( "message" ) ;
137
- expect ( Object . keys ( res . body . data ) ) . to . have . lengthOf ( 9 ) ;
138
- expect ( res . body . data . until ) . to . be . above ( res . body . data . from ) ;
139
- expect ( res . body . data ) . to . have . property ( "requestedBy" ) ;
140
- expect ( res . body . data . type ) . to . equal ( REQUEST_TYPE . OOO ) ;
141
- expect ( res . body . data . state ) . to . equal ( REQUEST_STATE . PENDING ) ;
142
180
expect ( res . body . message ) . to . equal ( REQUEST_CREATED_SUCCESSFULLY ) ;
181
+ expect ( res . body ) . to . not . have . property ( "data" ) ;
182
+
183
+ await requestsQuery . getRequestByKeyValues ( {
184
+ userId : testUserId ,
185
+ type : REQUEST_TYPE . OOO ,
186
+ status : REQUEST_STATE . PENDING
187
+ } ) . then ( ( request ) => {
188
+ expect ( request ) . to . not . be . null ;
189
+ // expect(request.reason).to.equal(validOooStatusRequests.reason);
190
+ done ( ) ;
191
+ } ) . catch ( done ) ;
192
+ } ) ;
193
+ } ) ;
194
+
195
+ it ( "should return error if invalid type is passed" , function ( done ) {
196
+ const type = "ACTIVE" ;
197
+ chai
198
+ . request ( app )
199
+ . post ( requestsEndpoint )
200
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
201
+ . send ( { ...validOooStatusRequests , type } )
202
+ . end ( function ( err , res ) {
203
+ expect ( res ) . to . have . status ( 400 ) ;
204
+ expect ( res . body ) . to . have . property ( "message" ) ;
205
+ expect ( res . body . message ) . to . equal ( `Invalid request type: ${ type } ` ) ;
143
206
done ( ) ;
144
207
} ) ;
145
208
} ) ;
146
209
147
- it ( "should create a new request" , function ( done ) {
210
+ it ( "should return 400 when until date is smalller than from date in request body " , function ( done ) {
148
211
chai
149
212
. request ( app )
150
- . post ( "/requests" )
213
+ . post ( requestsEndpoint )
151
214
. set ( "cookie" , `${ cookieName } =${ authToken } ` )
152
- . send ( validOooStatusRequests )
215
+ . send ( { ... validOooStatusRequests , until : Date . now ( ) } )
153
216
. end ( function ( err , res ) {
154
- expect ( res ) . to . have . status ( 201 ) ;
217
+ if ( err ) return done ( err ) ;
218
+ expect ( res ) . to . have . status ( 400 ) ;
155
219
expect ( res . body ) . to . have . property ( "message" ) ;
156
- expect ( res . body . message ) . to . equal ( REQUEST_CREATED_SUCCESSFULLY ) ;
220
+ expect ( res . body . message ) . to . equal ( "until date must be greater than or equal to from date" ) ;
157
221
done ( ) ;
158
222
} ) ;
159
223
} ) ;
160
224
161
- it ( "should return error if invalid type is passed" , function ( done ) {
162
- const type = "ACTIVE" ;
225
+ it ( "should return 400 when from date is less than today's date in request body" , function ( done ) {
163
226
chai
164
227
. request ( app )
165
- . post ( "/requests" )
228
+ . post ( requestsEndpoint )
166
229
. set ( "cookie" , `${ cookieName } =${ authToken } ` )
167
- . send ( { ...validOooStatusRequests , type } )
230
+ . send ( { ...validOooStatusRequests , from : Date . now ( ) - 1 * 24 * 60 * 60 * 1000 } )
168
231
. end ( function ( err , res ) {
232
+ if ( err ) return done ( err ) ;
169
233
expect ( res ) . to . have . status ( 400 ) ;
170
234
expect ( res . body ) . to . have . property ( "message" ) ;
171
- expect ( res . body . message ) . to . equal ( `Invalid request type: ${ type } ` ) ;
235
+ expect ( res . body . message ) . to . equal ( "from date must be greater than or equal to Today's date" ) ;
172
236
done ( ) ;
173
237
} ) ;
174
238
} ) ;
175
239
176
- it ( "should return error if message is not present in body" , function ( done ) {
240
+ it ( "should return 400 when message field is missing in request body" , function ( done ) {
177
241
chai
178
242
. request ( app )
179
- . post ( "/requests" )
243
+ . post ( requestsEndpoint )
180
244
. set ( "cookie" , `${ cookieName } =${ authToken } ` )
181
245
. send ( _ . omit ( validOooStatusRequests , "message" ) )
182
246
. end ( function ( err , res ) {
247
+ if ( err ) return done ( err ) ;
183
248
expect ( res ) . to . have . status ( 400 ) ;
184
249
expect ( res . body ) . to . have . property ( "message" ) ;
185
250
expect ( res . body . message ) . to . equal ( "message is required" ) ;
186
251
done ( ) ;
187
252
} ) ;
188
253
} ) ;
189
254
190
- it ( "should return error if state in the body is not PENDING " , function ( done ) {
255
+ it ( "should return 400 with error when status field is included in request body " , function ( done ) {
191
256
chai
192
257
. request ( app )
193
- . post ( "/requests" )
258
+ . post ( requestsEndpoint )
194
259
. set ( "cookie" , `${ cookieName } =${ authToken } ` )
195
- . send ( { ...validOooStatusRequests , state : REQUEST_STATE . APPROVED } )
260
+ . send ( { ...validOooStatusRequests , status : REQUEST_STATE . APPROVED } )
196
261
. end ( function ( err , res ) {
262
+ if ( err ) return done ( err ) ;
197
263
expect ( res ) . to . have . status ( 400 ) ;
198
264
expect ( res . body ) . to . have . property ( "message" ) ;
199
- expect ( res . body . message ) . to . equal ( "state must be PENDING" ) ;
265
+ expect ( res . body . message ) . to . equal ( `"status" is not allowed` ) ;
200
266
done ( ) ;
201
267
} ) ;
202
268
} ) ;
269
+
270
+ it . skip ( "should return 404 with error when user status not found" , async function ( ) {
271
+ await deleteUserStatus ( testUserId ) ;
272
+ const response = await chai
273
+ . request ( app )
274
+ . post ( requestsEndpoint )
275
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
276
+ . send ( validOooStatusRequests ) ;
277
+
278
+ expect ( response ) . to . have . status ( 404 ) ;
279
+ expect ( response . body ) . to . have . property ( "message" ) ;
280
+ // expect(response.body.message).to.equal(USER_STATUS_NOT_FOUND);
281
+ } ) ;
282
+
283
+ it . skip ( "should return 403 with error when user status is already OOO" , async function ( ) {
284
+ const testOOOUserStatus = {
285
+ currentStatus : {
286
+ state : userState . OOO
287
+ }
288
+ } ;
289
+ await updateUserStatus ( testUserId , testOOOUserStatus ) ;
290
+ const response = await chai
291
+ . request ( app )
292
+ . post ( requestsEndpoint )
293
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
294
+ . send ( validOooStatusRequests ) ;
295
+
296
+ expect ( response ) . to . have . status ( 403 ) ;
297
+ expect ( response . body ) . to . have . property ( "message" ) ;
298
+ // expect(response.body.message).to.equal(OOO_STATUS_ALREADY_EXIST);
299
+ } ) ;
300
+
301
+ it . skip ( "should return 409 with error when user already have pending OOO request" , async function ( ) {
302
+ await chai
303
+ . request ( app )
304
+ . post ( requestsEndpoint )
305
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
306
+ . send ( validOooStatusRequests ) ;
307
+ const response = await chai
308
+ . request ( app )
309
+ . post ( requestsEndpoint )
310
+ . set ( "cookie" , `${ cookieName } =${ authToken } ` )
311
+ . send ( validOooStatusRequests ) ;
312
+
313
+ expect ( response ) . to . have . status ( 409 ) ;
314
+ expect ( response . body ) . to . have . property ( "message" ) ;
315
+ expect ( response . body . message ) . to . equal ( REQUEST_ALREADY_PENDING ) ;
316
+ } ) ;
203
317
} ) ;
204
318
205
319
describe ( "PUT /requests/:id" , function ( ) {
@@ -827,4 +941,4 @@ describe("/requests Task", function () {
827
941
} ) ;
828
942
} ) ;
829
943
} ) ;
830
- } ) ;
944
+ } ) ;
0 commit comments