-
Notifications
You must be signed in to change notification settings - Fork 31
/
update.spec.ejs
97 lines (79 loc) · 2.93 KB
/
update.spec.ejs
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
const <%- props.name.pascalCase %> = require('../../entities/<%- props.name.camelCase %>')
const update<%- props.name.pascalCase %> = require('./update<%- props.name.pascalCase %>')
const assert = require('assert')
const { spec, scenario, given, check, samples } = require('@herbsjs/herbs').specs
const { herbarium } = require('@herbsjs/herbarium')
const update<%- props.name.pascalCase %>Spec = spec({
usecase: update<%- props.name.pascalCase %>,
'Valid <%- props.name.raw %>s': samples([
{
<%- props.request.valid %>
},
{
<%- props.request.valid %>
}
]),
'Update a existing <%- props.name.raw %> when it is valid': scenario({
'Given a valid <%- props.name.raw %>': given((ctx) => ({
request: ctx.sample,
user: { hasAccess: true }
})),
'Given a repository with a existing <%- props.name.raw %>': given((ctx) => ({
injection: {
<%- props.name.pascalCase %>Repository: class <%- props.name.pascalCase %>Repository {
async findByID(id) {
const fake<%- props.name.pascalCase %> = {
<%- props.mock %>
}
return ([<%- props.name.pascalCase %>.fromJSON(fake<%- props.name.pascalCase %>)])
}
async update(id) { return true }
}
},
})),
// when: default when for use case
'Must run without errors': check((ctx) => {
assert.ok(ctx.response.isOk)
}),
'Must confirm update': check((ctx) => {
assert.ok(ctx.response.ok === true)
})
}),
'Do not update a <%- props.name.raw %> when it is invalid': scenario({
'Given a invalid <%- props.name.raw %>': given({
request: {
<%- props.request.invalid %>
},
user: { hasAccess: true },
injection: {},
}),
// when: default when for use case
'Must return an error': check((ctx) => {
assert.ok(ctx.response.isErr)
// assert.ok(ctx.response.isInvalidEntityError)
}),
}),
'Do not update <%- props.name.raw %> if it does not exist': scenario({
'Given an empty <%- props.name.raw %> repository': given({
request: {
<%- props.request.valid %>
},
user: { hasAccess: true },
injection:{
<%- props.name.pascalCase %>Repository: class <%- props.name.pascalCase %>Repository {
async findByID(id) { return [] }
}
},
}),
// when: default when for use case
'Must return an error': check((ctx) => {
assert.ok(ctx.response.isErr)
assert.ok(ctx.response.isNotFoundError)
}),
}),
})
module.exports =
herbarium.specs
.add(update<%- props.name.pascalCase %>Spec, 'Update<%- props.name.pascalCase %>Spec')
.metadata({ usecase: 'Update<%- props.name.pascalCase %>' })
.spec