-
Notifications
You must be signed in to change notification settings - Fork 54
/
personController.spec.js
83 lines (75 loc) · 2.51 KB
/
personController.spec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import test from 'ava'
import sinon from 'sinon'
import { Ability } from '@casl/ability'
import { appReady } from '../../../server'
import Person from '../person'
import MockExpressRequest from 'mock-express-request'
import MockResponse from 'mock-res'
import { updatePersonDetail } from '../person.controller'
import MemoryMongo from '../../../util/test-memory-mongo'
import people from '../__tests__/person.fixture'
test.before('before connect to database', async (t) => {
try {
t.context.memMongo = new MemoryMongo()
await t.context.memMongo.start()
await appReady
await Person.create(people).catch((err) => console.error('Unable to create people:', err))
} catch (e) {
console.error('personController.spec.js, before connect to database', e)
}
})
test.after.always(async (t) => {
await t.context.memMongo.stop()
})
test.serial('Should call send status function for null record ', async t => {
const userIDWantToUpdate = 'asdfasdfgadf'
const fakeSendStatus = sinon.fake()
const rawRules = [
{ action: 'update', subject: 'Person', conditions: { _id: userIDWantToUpdate } }
]
const ability = new Ability(rawRules)
const request = new MockExpressRequest()
request.body = {
_id: '5d48f775741eab0d344d4c29'
}
request.ability = ability
const response = new MockResponse()
response.sendStatus = (status) => { fakeSendStatus() }
await updatePersonDetail(request, response)
t.is(1, fakeSendStatus.callCount)
})
test.serial('Should call next middleware when record is found', async t => {
const personToQuery = await Person.find({ name: 'Andrew Watkins' })
const idToQuery = personToQuery[0]._id
const fakeSendStatus = sinon.fake()
const nextMiddleware = sinon.fake()
const rawRules = [
{ action: 'manage', subject: 'Person' }
]
const ability = new Ability(rawRules)
const request = new MockExpressRequest()
request.body = {
_id: idToQuery,
name: 'Andrew Watkins',
nickname: 'avowkind',
email: 'andrew@groat.nz',
about: 'Voluntari.ly Product Lead',
location: 'Auckland',
language: 'EN',
role: [
'admin'
],
status: 'active',
imgUrl: 'https://avatars2.githubusercontent.com/u/1596437?v=4',
phone: '+64 027 7031007'
}
request.ability = ability
request.crudify = {
result: {}
}
const response = new MockResponse()
response.sendStatus = (status) => { fakeSendStatus() }
await updatePersonDetail(request, response, nextMiddleware)
t.is(1, nextMiddleware.callCount)
t.deepEqual(request.crudify.result, request.body)
})