1 |
|
2 |
|
3 |
|
4 |
|
5 | 'use strict'
|
6 |
|
7 | const create = require('../lib/create.js')
|
8 | const apemanport = require('apemanport')
|
9 | const fs = require('fs')
|
10 | const uuid = require('uuid')
|
11 | const assert = require('assert')
|
12 | const path = require('path')
|
13 | const apemandb = require('apemandb')
|
14 | const apemanApp = require('apeman-app')
|
15 | const apemanmodel = require('apemanmodel')
|
16 | const apemanrequest = require('apemanrequest')
|
17 | const apemansleep = require('apemansleep')
|
18 |
|
19 | const loc = require('../doc/mocks/locales')
|
20 | const co = require('co')
|
21 | const tmpDir = path.join(__dirname, '/../tmp')
|
22 | const dbFile = tmpDir + '/testing-db01.db'
|
23 |
|
24 |
|
25 | describe('create', function () {
|
26 | this.timeout(8000)
|
27 |
|
28 | let sleep = apemansleep.create({})
|
29 | let db, request, baseUrl, server
|
30 |
|
31 | before(() => co(function * () {
|
32 | request = apemanrequest.create({ jar: true })
|
33 | db = apemandb({
|
34 | env: {
|
35 | DATABASE: 'testing-database02',
|
36 | USERNAME: 'FOO',
|
37 | PASSWORD: 'BAR',
|
38 | DIALECT: 'sqlite',
|
39 | STORAGE: dbFile,
|
40 | LOGGING: false
|
41 | },
|
42 | models: `${apemanmodel.paths.SAMPLE_DEFS_DIR}/*.json`
|
43 | })
|
44 | yield db.sync({ force: true })
|
45 | }))
|
46 |
|
47 | before(() => co(function * () {
|
48 | let port = yield apemanport.find()
|
49 | server = yield apemanApp('testing-app', {
|
50 | port,
|
51 | configuration: {
|
52 | $apps: {
|
53 | 'testing-app': {
|
54 | '/': [
|
55 | require('apeman-app-body')(),
|
56 | require('apeman-app-link')({
|
57 | protocol: 'http'
|
58 | }),
|
59 | require('apeman-app-locale')(
|
60 | loc
|
61 | ),
|
62 | require('apeman-app-jsonapi')()
|
63 | ],
|
64 | '/api': [
|
65 | create(db.models.User, {
|
66 | pathname: '/users',
|
67 | list: co.wrap(function * listWrap (ctx, next) {
|
68 | ctx.set('test-before-list', true)
|
69 | yield next()
|
70 | ctx.set('test-after-list', true)
|
71 | }),
|
72 | create: {
|
73 | schema: require('../doc/mocks/schemas/user.schema.json'),
|
74 | handle: co.wrap(function * createWrap (ctx, next) {
|
75 | ctx.set('test-before-create', true)
|
76 | yield next()
|
77 | ctx.set('test-after-create', true)
|
78 | })
|
79 | },
|
80 | one: co.wrap(function * oneWrap (ctx, next) {
|
81 | ctx.set('test-before-one', true)
|
82 | yield next()
|
83 | }),
|
84 | update: co.wrap(function * updateWrap (ctx, next) {
|
85 | ctx.set('test-before-update', true)
|
86 | yield next()
|
87 | }),
|
88 | destroy: co.wrap(function * destroyWrap (ctx, next) {
|
89 | ctx.set('test-before-destroy', true)
|
90 | yield next()
|
91 | }),
|
92 | bulkDestroy: co.wrap(function * bulkDestroyWrap (ctx, next) {
|
93 | ctx.set('test-before-destroy-bulk', true)
|
94 | yield next()
|
95 | })
|
96 | }),
|
97 | create(db.models.UserSign, {
|
98 | pathname: '/signs'
|
99 | })
|
100 | ]
|
101 | }
|
102 | }
|
103 | }
|
104 | })
|
105 | baseUrl = `http://localhost:${port}`
|
106 | }))
|
107 |
|
108 | after(() => co(function * () {
|
109 | yield sleep.sleep(100)
|
110 | fs.unlinkSync(dbFile)
|
111 | }))
|
112 |
|
113 | after(() => co(function * () {
|
114 | yield server.close()
|
115 | }))
|
116 |
|
117 | let user01, user02, user03, user04,
|
118 | profile02, sign04
|
119 |
|
120 | it('Endpoint spec', () => co(function * () {
|
121 | let res = yield request({
|
122 | method: 'OPTIONS',
|
123 | url: `${baseUrl}/api/users`,
|
124 | json: true
|
125 | })
|
126 | let { body, statusCode } = res
|
127 | assert.equal(statusCode, 200)
|
128 | assert.ok(body)
|
129 | }))
|
130 |
|
131 | it('List users', () => co(function * () {
|
132 | let res = yield request({
|
133 | method: 'GET',
|
134 | url: `${baseUrl}/api/users`,
|
135 | json: true
|
136 | })
|
137 | let { body, headers, statusCode } = res
|
138 | assert.equal(statusCode, 200)
|
139 | assert.ok(headers[ 'test-before-list' ])
|
140 | assert.ok(headers[ 'test-after-list' ])
|
141 | assert.equal(body.data.length, 0)
|
142 | assert.equal(body.meta.total, 0)
|
143 | }))
|
144 |
|
145 | it('Create user', () => co(function * () {
|
146 | {
|
147 | let res = yield request({
|
148 | method: 'POST',
|
149 | url: `${baseUrl}/api/users/`,
|
150 | json: true,
|
151 | body: {
|
152 | data: {
|
153 | type: 'users',
|
154 | attributes: {
|
155 | email: 'apbc@example.com'
|
156 | }
|
157 | }
|
158 | }
|
159 | })
|
160 | let { body, statusCode } = res
|
161 | assert.equal(statusCode, 400)
|
162 | let { errors } = body
|
163 | assert.equal(errors[ 0 ].source.pointer, '/data/attributes/key')
|
164 | }
|
165 | {
|
166 | let res = yield request({
|
167 | method: 'POST',
|
168 | url: `${baseUrl}/api/users/`,
|
169 | json: true,
|
170 | body: {
|
171 | data: {
|
172 | type: 'users',
|
173 | attributes: {
|
174 | key: 'foo_bar',
|
175 | email: 'apbc@example.com'
|
176 | }
|
177 | }
|
178 | }
|
179 | })
|
180 | let { body, headers, statusCode } = res
|
181 | assert.equal(statusCode, 201)
|
182 | assert.ok(body.links.self)
|
183 | let { data } = body
|
184 | user01 = Object.assign(
|
185 | {},
|
186 | data.attributes,
|
187 | { id: data.id }
|
188 | )
|
189 | assert.ok(!headers[ 'test-before-list' ])
|
190 | assert.ok(headers[ 'test-before-create' ])
|
191 | }
|
192 | }))
|
193 |
|
194 | it('Create user 2', () => co(function * () {
|
195 | {
|
196 | let res = yield request({
|
197 | method: 'POST',
|
198 | url: `${baseUrl}/api/users/`,
|
199 | json: true,
|
200 | body: {
|
201 | data: {
|
202 | type: '__invalid_types__',
|
203 | attributes: {
|
204 | key: 'foo_bar2_fail',
|
205 | email: 'apbc2_fail@example.com'
|
206 | }
|
207 | }
|
208 | }
|
209 | })
|
210 | let { body } = res
|
211 | assert.equal(body.meta.action, 'create')
|
212 | assert.equal(body.errors[ 0 ].title, 'RESOURCE_TYPE_INVALID_ERROR')
|
213 | }
|
214 | {
|
215 | let res = yield request({
|
216 | method: 'POST',
|
217 | url: `${baseUrl}/api/users/`,
|
218 | json: true,
|
219 | body: {
|
220 | data: {
|
221 | type: 'users',
|
222 | attributes: {
|
223 | key: 'foo_bar2',
|
224 | email: 'apbc2@example.com'
|
225 | }
|
226 | }
|
227 | }
|
228 | })
|
229 | let { body } = res
|
230 | assert.equal(res.statusCode, 201)
|
231 | let { data } = body
|
232 | user02 = Object.assign(
|
233 | {},
|
234 | data.attributes,
|
235 | { id: data.id }
|
236 | )
|
237 | let headers = res.headers
|
238 | assert.ok(headers[ 'test-before-create' ])
|
239 | }
|
240 | }))
|
241 |
|
242 | it('Bulk create users', () => co(function * () {
|
243 | let res = yield request({
|
244 | method: 'POST',
|
245 | url: `${baseUrl}/api/users/`,
|
246 | json: true,
|
247 | body: {
|
248 | data: [
|
249 | {
|
250 | type: 'users',
|
251 | attributes: {
|
252 | key: 'foo_bar3',
|
253 | email: 'apbc3@example.com'
|
254 | }
|
255 | },
|
256 | {
|
257 | type: 'users',
|
258 | id: uuid.v4(),
|
259 | attributes: {
|
260 | key: 'foo_bar4',
|
261 | email: 'apbc4@example.com'
|
262 | }
|
263 | }
|
264 | ]
|
265 | }
|
266 | })
|
267 | let { body } = res
|
268 | let { meta } = body
|
269 | let { data } = body
|
270 | assert.equal(meta.action, 'bulkCreate')
|
271 | assert.equal(meta.status, 201)
|
272 | assert.equal(data.length, 2)
|
273 | user03 = Object.assign({ id: data[ 0 ].id }, data[ 0 ].attributes)
|
274 | user04 = Object.assign({ id: data[ 1 ].id }, data[ 1 ].attributes)
|
275 | }))
|
276 |
|
277 | it('Bulk update users', () => co(function * () {
|
278 | let res = yield request({
|
279 | method: 'PATCH',
|
280 | url: `${baseUrl}/api/users/`,
|
281 | json: true,
|
282 | body: {
|
283 | data: [
|
284 | {
|
285 | type: 'users',
|
286 | id: user03.id,
|
287 | attributes: {
|
288 | email: 'apbc3_updated@example.com'
|
289 | }
|
290 | },
|
291 | {
|
292 | type: 'users',
|
293 | id: user04.id,
|
294 | attributes: {
|
295 | email: 'apbc4_updated@example.com'
|
296 | }
|
297 | }
|
298 | ]
|
299 | }
|
300 | })
|
301 | let { body } = res
|
302 | let { meta } = body
|
303 | let { data } = body
|
304 | assert.equal(meta.action, 'bulkUpdate')
|
305 | assert.equal(data.length, 2)
|
306 | assert.equal(data[ 0 ].attributes.email, 'apbc3_updated@example.com')
|
307 | }))
|
308 |
|
309 | it('One user', () => co(function * () {
|
310 | let relatedLink, relationLink
|
311 | {
|
312 | let res = yield request({
|
313 | method: 'GET',
|
314 | url: `${baseUrl}/api/users/${user02.id}`,
|
315 | json: true
|
316 | })
|
317 | let { body, headers, statusCode } = res
|
318 | assert.equal(statusCode, 200)
|
319 | let { data } = body
|
320 | assert.equal(data.id, user02.id)
|
321 | assert.ok(headers[ 'test-before-one' ])
|
322 | relationLink = data.relationships.profile.links.self
|
323 | relatedLink = data.relationships.profile.links.related
|
324 | assert.ok(
|
325 | relatedLink.match(
|
326 | '/api/users/2/profile'
|
327 | )
|
328 | )
|
329 | assert.ok(
|
330 | relationLink.match(
|
331 | '/api/users/2/relationships/profile'
|
332 | )
|
333 | )
|
334 | assert.ok(
|
335 | relatedLink.match(
|
336 | '/api/users/2/profile'
|
337 | )
|
338 | )
|
339 | }
|
340 | {
|
341 | let res = yield request({
|
342 | method: 'GET',
|
343 | url: relatedLink,
|
344 | json: true
|
345 | })
|
346 | let { body } = res
|
347 | assert.equal(res.statusCode, 200)
|
348 | assert.equal(body.meta.action, 'relatedList')
|
349 | }
|
350 |
|
351 | {
|
352 | let res = yield request({
|
353 | method: 'GET',
|
354 | url: relationLink,
|
355 | json: true
|
356 | })
|
357 | let { body } = res
|
358 | assert.equal(res.statusCode, 200)
|
359 | assert.equal(body.meta.action, 'relationList')
|
360 | assert.equal(body.links.self, relationLink)
|
361 | assert.equal(body.links.related, relatedLink)
|
362 | }
|
363 | }))
|
364 |
|
365 | it('Create invalid id', () => co(function * () {
|
366 | let res = yield request({
|
367 | method: 'GET',
|
368 | url: baseUrl + '/api/users/999999999999',
|
369 | json: true
|
370 | })
|
371 | let { body } = res
|
372 | assert.ok(body)
|
373 | assert.equal(res.statusCode, 404)
|
374 | let headers = res.headers
|
375 | assert.ok(headers[ 'test-before-one' ])
|
376 | }))
|
377 |
|
378 | it('Update user.', () => co(function * () {
|
379 | {
|
380 | let res = yield request({
|
381 | method: 'PATCH',
|
382 | url: `${baseUrl}/api/users/` + user02.id,
|
383 | json: true,
|
384 | body: {
|
385 | data: {
|
386 | attributes: {
|
387 | key: 'foo_bar2_updated',
|
388 | vr: user02.vr
|
389 | }
|
390 | }
|
391 | }
|
392 | })
|
393 | let { body } = res
|
394 | assert.equal(res.statusCode, 400)
|
395 | let errors = body.errors
|
396 | assert.equal(errors[ 0 ].source.pointer, '/data/type')
|
397 | }
|
398 | {
|
399 | let res = yield request({
|
400 | method: 'PATCH',
|
401 | url: `${baseUrl}/api/users/${user02.id}`,
|
402 | json: true,
|
403 | body: {
|
404 | data: {
|
405 | type: 'users',
|
406 | attributes: {
|
407 | key: 'foo_bar2_updated',
|
408 | vr: user02.vr
|
409 | }
|
410 | }
|
411 | }
|
412 | })
|
413 | let { body } = res
|
414 | assert.equal(res.statusCode, 200)
|
415 | let data = body.data
|
416 | assert.equal(data.id, data.id)
|
417 | assert.equal(data.attributes.key, 'foo_bar2_updated')
|
418 | let headers = res.headers
|
419 | assert.ok(headers[ 'test-before-update' ])
|
420 | }
|
421 | }))
|
422 |
|
423 | it('Update user with conflict.', () => co(function * () {
|
424 | let res = yield request({
|
425 | method: 'PATCH',
|
426 | url: `${baseUrl}/api/users/` + user02.id,
|
427 | json: true,
|
428 | body: {
|
429 | data: {
|
430 | type: 'users',
|
431 | attributes: {
|
432 | key: 'foo_bar2_updated',
|
433 | vr: 1
|
434 | }
|
435 | }
|
436 | }
|
437 | })
|
438 | let { body } = res
|
439 | assert.equal(res.statusCode, 409)
|
440 | assert.ok(body)
|
441 | }))
|
442 |
|
443 | it('Create user profile.', () => co(function * () {
|
444 | let res = yield request({
|
445 | method: 'POST',
|
446 | url: `${baseUrl}/api/users/${user02.id}/profile`,
|
447 | json: true,
|
448 | body: {
|
449 | data: {
|
450 | type: 'user_profiles',
|
451 | attributes: {
|
452 | name: 'Profile of user02'
|
453 | }
|
454 | }
|
455 | }
|
456 | })
|
457 | let { body } = res
|
458 | assert.equal(res.statusCode, 201)
|
459 | let { meta } = body
|
460 | let data = body.data
|
461 | assert.equal(meta.action, 'relatedCreate')
|
462 | assert.equal(data.type, 'user_profiles')
|
463 | assert.equal(data.attributes.userId, 2)
|
464 | profile02 = Object.assign({ id: data.id }, data.attributes)
|
465 | }))
|
466 |
|
467 | it('Update user profile.', () => co(function * () {
|
468 | let res = yield request({
|
469 | method: 'PATCH',
|
470 | url: `${baseUrl}/api/users/` + user02.id + '/profile/' + profile02.id,
|
471 | json: true,
|
472 | body: {
|
473 | data: {
|
474 | type: 'user_profiles',
|
475 | attributes: {
|
476 | name: 'Profile of user02'
|
477 | }
|
478 | }
|
479 | }
|
480 | })
|
481 | let { body } = res
|
482 | assert.equal(res.statusCode, 200)
|
483 | let { meta } = body
|
484 | let data = body.data
|
485 | let links = body.links
|
486 | assert.equal(meta.action, 'relatedUpdate')
|
487 | assert.equal(data.type, 'user_profiles')
|
488 | assert.equal(data.attributes.name, 'Profile of user02')
|
489 | assert.ok(links.self.match('/api/users/2/profile/1'))
|
490 | }))
|
491 |
|
492 | it('List user profiles.', () => co(function * () {
|
493 | let res = yield request({
|
494 | method: 'GET',
|
495 | url: `${baseUrl}/api/users/${user02.id}/profile`,
|
496 | json: true,
|
497 | body: {}
|
498 | })
|
499 | let { body } = res
|
500 | assert.equal(res.statusCode, 200)
|
501 | let { meta } = body
|
502 | let data = body.data
|
503 | assert.equal(data.id, profile02.id)
|
504 | assert.equal(meta.action, 'relatedList')
|
505 | }))
|
506 |
|
507 | it('Get the user profile.', () => co(function * () {
|
508 | let res = yield request({
|
509 | method: 'GET',
|
510 | url: `${baseUrl}/api/users/` + user02.id + '/profile/' + profile02.id,
|
511 | json: true,
|
512 | body: {}
|
513 | })
|
514 | let { body } = res
|
515 | assert.equal(res.statusCode, 200)
|
516 | let { meta } = body
|
517 | let data = body.data
|
518 | assert.equal(data.id, profile02.id)
|
519 | assert.equal(meta.action, 'relatedOne')
|
520 | }))
|
521 |
|
522 | it('Get user include profile.', () => co(function * () {
|
523 | let res = yield request({
|
524 | method: 'get',
|
525 | url: `${baseUrl}/api/users/${user02.id}?include=profile`,
|
526 | json: true
|
527 | })
|
528 | let { body } = res
|
529 | assert.equal(res.statusCode, 200)
|
530 | let data = body.data
|
531 | let included = body.included
|
532 | assert.equal(included[ 0 ].type, 'user_profiles')
|
533 | assert.ok(!data.attributes.profile)
|
534 | }))
|
535 |
|
536 | it('List users include profile.', () => co(function * () {
|
537 | let res = yield request({
|
538 | method: 'get',
|
539 | url: baseUrl + '/api/users/?include=profile',
|
540 | json: true
|
541 | })
|
542 | let { body } = res
|
543 | assert.equal(res.statusCode, 200)
|
544 | let data = body.data
|
545 | let included = body.included
|
546 | assert.equal(included[ 0 ].type, 'user_profiles')
|
547 | assert.equal(included[ 0 ].id, 1)
|
548 | data.forEach((data) => {
|
549 | assert.ok(!data.attributes.profile)
|
550 | assert.ok(data.links.self.match('/api/users/' + data.id))
|
551 | let profile = data.relationships.profile
|
552 | assert.ok(profile.links.self)
|
553 | assert.ok(profile.links.related)
|
554 | })
|
555 | }))
|
556 |
|
557 | it('Remove user profile relation.', () => co(function * () {
|
558 | let res = yield request({
|
559 | method: 'DELETE',
|
560 | url: `${baseUrl}/api/users/${user02.id}/relationships/profile`,
|
561 | json: true,
|
562 | body: {
|
563 | data: [
|
564 | { type: 'user_profiles', id: profile02.id }
|
565 | ]
|
566 | }
|
567 | })
|
568 | let { body } = res
|
569 | assert.equal(res.statusCode, 200)
|
570 | let { meta } = body
|
571 | assert.equal(meta.action, 'bulkRelationDestroy')
|
572 | }))
|
573 |
|
574 | it('Create user profile relation.', () => co(function * () {
|
575 | let res = yield request({
|
576 | method: 'POST',
|
577 | url: `${baseUrl}/api/users/${user02.id}/relationships/profile`,
|
578 | json: true,
|
579 | body: {
|
580 | data: [
|
581 | { type: 'user_profiles', id: profile02.id }
|
582 | ]
|
583 | }
|
584 | })
|
585 | let { body } = res
|
586 | assert.equal(res.statusCode, 200)
|
587 | let { meta } = body
|
588 | assert.equal(meta.action, 'bulkRelationCreate')
|
589 | }))
|
590 |
|
591 | it('update user profile relation.', () => co(function * () {
|
592 | {
|
593 | let res = yield request({
|
594 | method: 'PATCH',
|
595 | url: `${baseUrl}/api/users/` + user02.id + '/relationships/profile',
|
596 | json: true,
|
597 | body: {
|
598 | data: []
|
599 | }
|
600 | })
|
601 | let { body } = res
|
602 | assert.equal(res.statusCode, 200)
|
603 | let { meta } = body
|
604 | assert.equal(meta.action, 'relationUpdate')
|
605 | }
|
606 | {
|
607 | let res = yield request({
|
608 | method: 'PATCH',
|
609 | url: `${baseUrl}/api/users/${user02.id}/relationships/profile`,
|
610 | json: true,
|
611 | body: {
|
612 | data: [
|
613 | { type: 'user_profiles', id: profile02.id }
|
614 | ]
|
615 | }
|
616 | })
|
617 | let { body } = res
|
618 | assert.equal(res.statusCode, 200)
|
619 | let { meta } = body
|
620 | assert.equal(meta.action, 'relationUpdate')
|
621 | }
|
622 | }))
|
623 |
|
624 | it('Destroy user profile.', () => co(function * () {
|
625 | let res = yield request({
|
626 | method: 'DELETE',
|
627 | url: `${baseUrl}/api/users/${user02.id}/profile/${profile02.id}`,
|
628 | json: true
|
629 | })
|
630 | let { body } = res
|
631 | assert.equal(res.statusCode, 200)
|
632 | let { meta } = body
|
633 | assert.equal(meta.action, 'relatedDestroy')
|
634 | }))
|
635 |
|
636 | it('List again', () => co(function * () {
|
637 | let res = yield request({
|
638 | method: 'GET',
|
639 | url: `${baseUrl}/api/users/`,
|
640 | json: true
|
641 | })
|
642 | let { body } = res
|
643 | assert.equal(res.statusCode, 200)
|
644 | let { meta } = body
|
645 | let data = body.data
|
646 | let links = body.links
|
647 | assert.equal(data.length, 4)
|
648 | assert.equal(meta.total, '4')
|
649 | assert.ok(links)
|
650 | let headers = res.headers
|
651 | assert.ok(headers[ 'test-before-list' ])
|
652 | }))
|
653 |
|
654 | it('List with limit', () => co(function * () {
|
655 | let res = yield request({
|
656 | method: 'GET',
|
657 | url: baseUrl + '/api/users/?page[size]=1'
|
658 | })
|
659 | let { body } = res
|
660 | assert.equal(res.statusCode, 200)
|
661 | let { meta, data } = body
|
662 | assert.equal(data.length, 1)
|
663 | assert.equal(meta.total, '4')
|
664 | }))
|
665 |
|
666 | it('List with keyword.', () => co(function * () {
|
667 | let res = yield request({
|
668 | method: 'GET',
|
669 | url: baseUrl + '/api/users/?filter[key][$like]=%foo_bar2_%'
|
670 | })
|
671 | let { body } = res
|
672 | assert.equal(res.statusCode, 200)
|
673 | let { meta, data } = body
|
674 | assert.equal(data.length, 1)
|
675 | assert.equal(meta.total, '1')
|
676 | }))
|
677 |
|
678 | it('Create signs.', () => co(function * () {
|
679 | {
|
680 | let res = yield request({
|
681 | method: 'POST',
|
682 | url: baseUrl + '/api/signs',
|
683 | json: true,
|
684 | body: {
|
685 | data: [
|
686 | {
|
687 | type: 'user_signs',
|
688 | attributes: {
|
689 | key: user03.key,
|
690 | kind: 'user.key',
|
691 | hash: 'hogehoge',
|
692 | userId: user03.id
|
693 | },
|
694 | relationships: {
|
695 | user: {
|
696 | data: [
|
697 | { type: 'users', id: user03.id }
|
698 | ]
|
699 | }
|
700 | }
|
701 | },
|
702 | {
|
703 | type: 'user_signs',
|
704 | attributes: {
|
705 | key: user04.key,
|
706 | kind: 'user.key',
|
707 | hash: 'hogehoge',
|
708 | userId: user04.id
|
709 | }
|
710 | }
|
711 | ]
|
712 | }
|
713 | })
|
714 | let { body, statusCode } = res
|
715 | assert.equal(res.statusCode, 201)
|
716 | let { meta, data } = body
|
717 | assert.equal(meta.action, 'bulkCreate')
|
718 | assert.equal(data[ 0 ].attributes.userId, 3)
|
719 | sign04 = Object.assign({ id: data[ 1 ].id }, data[ 1 ].attributes)
|
720 | }
|
721 | {
|
722 | let res = yield request({
|
723 | method: 'POST',
|
724 | url: `${baseUrl}/api/users/` + user04.id + '/relationships/sign',
|
725 | json: true,
|
726 | body: {
|
727 | data: {
|
728 | type: 'user_signs',
|
729 | id: sign04.id
|
730 | }
|
731 | }
|
732 | })
|
733 | let { body } = res
|
734 | assert.deepEqual(body.data, { type: 'user_signs', id: '2' })
|
735 | }
|
736 | }))
|
737 |
|
738 | it('Destroy bulk the users', () => co(function * () {
|
739 | let res = yield request({
|
740 | method: 'DELETE',
|
741 | url: baseUrl + '/api/users',
|
742 | json: true,
|
743 | body: {
|
744 | data: [
|
745 | { type: 'users', id: user03.id },
|
746 | { type: 'users', id: user04.id }
|
747 | ]
|
748 | }
|
749 | })
|
750 | let { body } = res
|
751 | assert.equal(res.statusCode, 200)
|
752 | let { meta } = body
|
753 | assert.equal(meta.count, 2)
|
754 | let headers = res.headers
|
755 | assert.ok(headers[ 'test-before-destroy-bulk' ])
|
756 | }))
|
757 |
|
758 | it('Bulk destroy the user', () => co(function * () {
|
759 | let res = yield request({
|
760 | method: 'DELETE',
|
761 | url: `${baseUrl}/api/users/${user02.id}`,
|
762 | json: true
|
763 | })
|
764 | let { body } = res
|
765 | assert.equal(res.statusCode, 200)
|
766 | let { meta } = body
|
767 | assert.equal(meta.count, 1)
|
768 | let headers = res.headers
|
769 | assert.ok(headers[ 'test-before-destroy' ])
|
770 | }))
|
771 |
|
772 | it('Create user and signs', () => co(function * () {
|
773 | let sign02Signs
|
774 | let id = uuid.v4()
|
775 | {
|
776 | let res = yield request({
|
777 | method: 'POST',
|
778 | url: `${baseUrl}/api/users/`,
|
779 | json: true,
|
780 | body: {
|
781 | data: {
|
782 | type: 'users',
|
783 | id: id,
|
784 | attributes: {
|
785 | key: 'foo_bar5',
|
786 | email: 'apbc5@example.com'
|
787 | }
|
788 | }
|
789 | }
|
790 | })
|
791 | let { body } = res
|
792 | assert.equal(res.statusCode, 201)
|
793 | let data = body.data
|
794 | user02 = Object.assign(
|
795 | {},
|
796 | data.attributes,
|
797 | { id: data.id }
|
798 | )
|
799 | let headers = res.headers
|
800 | assert.ok(headers[ 'test-before-create' ])
|
801 | }
|
802 | {
|
803 | let res = yield request({
|
804 | method: 'POST',
|
805 | url: `${baseUrl}/api/users/${user02.id}/sign`,
|
806 | json: true,
|
807 | body: {
|
808 | data: [
|
809 | {
|
810 | type: 'user_signs',
|
811 | attributes: {
|
812 | key: user02.key,
|
813 | kind: 'user.key',
|
814 | hash: 'hoge'
|
815 | }
|
816 | },
|
817 | {
|
818 | type: 'user_signs',
|
819 | attributes: {
|
820 | key: user02.email,
|
821 | kind: 'user.email',
|
822 | hash: 'hoge'
|
823 | }
|
824 | }
|
825 | ]
|
826 | }
|
827 | })
|
828 | let { body } = res
|
829 | assert.equal(res.statusCode, 201)
|
830 | let data = body.data
|
831 | assert.equal(data[ 0 ].type, 'user_signs')
|
832 | sign02Signs = data.map((data) => Object.assign(
|
833 | { id: data.id },
|
834 | data.attributes
|
835 | ))
|
836 | }
|
837 | {
|
838 | let res = yield request({
|
839 | method: 'PATCH',
|
840 | url: `${baseUrl}/api/users/` + user02.id + '/sign',
|
841 | json: true,
|
842 | body: {
|
843 | data: sign02Signs.map((sign) =>
|
844 | ({
|
845 | type: 'user_signs',
|
846 | id: sign.id,
|
847 | attributes: {
|
848 | hash: 'fuge'
|
849 | }
|
850 | })
|
851 | )
|
852 | }
|
853 | })
|
854 | let { body } = res
|
855 | assert.equal(res.statusCode, 200)
|
856 | let { meta } = body
|
857 | let data = body.data
|
858 | assert.equal(meta.action, 'bulkRelatedUpdate')
|
859 | assert.equal(data[ 0 ].attributes.hash, 'fuge')
|
860 | }
|
861 | {
|
862 | let res = yield request({
|
863 | method: 'DELETE',
|
864 | url: `${baseUrl}/api/users/${user02.id}/sign`,
|
865 | json: true,
|
866 | body: {
|
867 | data: {
|
868 | type: 'user_signs',
|
869 | id: sign02Signs[ 0 ].id
|
870 | }
|
871 | }
|
872 | })
|
873 | let { body } = res
|
874 | assert.equal(res.statusCode, 200)
|
875 | let { meta } = body
|
876 | assert.equal(meta.action, 'bulkRelatedDestroy')
|
877 | assert.deepEqual(meta, { action: 'bulkRelatedDestroy', count: 1 })
|
878 | }
|
879 | }))
|
880 | })
|
881 |
|