Skip to content

Commit 5ef2074

Browse files
Tom KirkpatrickTom Kirkpatrick
authored andcommitted
test: add test case for error handling
1 parent e527b92 commit 5ef2074

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

test/fullcube-state-machine/common/models/order.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,14 @@ module.exports = function OrderModel(Order) {
3636
return Promise.resolve(ctx)
3737
})
3838

39+
// Disable
40+
Order.observe('fsm:ondisable', ctx => {
41+
log.info(`Disabling order ${ctx.instance.id}`)
42+
return Promise.reject(new Error('not implemented'))
43+
})
44+
Order.observe('fsm:onentereddisabled', ctx => {
45+
log.info(`Sucessfully disabled order ${ctx.instance.id}`)
46+
return Promise.resolve(ctx)
47+
})
48+
3949
}

test/fullcube-state-machine/common/models/order.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@
7878
"events": [
7979
{ "name": "cancel", "from": "prepared", "to": "canceled" },
8080
{ "name": "deliver", "from": "prepared", "to": "delivered", "settings": { "allowForce" : true } },
81-
{ "name": "prepare", "from": [ "none" ], "to": "prepared" }
81+
{ "name": "prepare", "from": [ "none" ], "to": "prepared" },
82+
{ "name": "disable", "from": [ "canceled", "delivered", "prepared" ], "to": "disabled" }
8283
]
8384
}
8485
}

test/test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,4 +334,26 @@ describe('Force status update', function() {
334334
})
335335
})
336336
})
337+
338+
describe('Failed state change', function() {
339+
beforeEach(function() {
340+
return Order.create()
341+
.then(order => (this.order = order))
342+
})
343+
344+
it('should return with the rejected error', function() {
345+
this.disabledSpy = sinon.spy()
346+
Order.observe('fsm:onentereddisabled', ctx => {
347+
this.disabledSpy()
348+
return Promise.resolve(ctx)
349+
})
350+
return this.order.disable()
351+
.then(() => new Error('should not have completed event'))
352+
.catch(err => {
353+
expect(err).to.have.property('message', 'not implemented')
354+
return this.order.reload().then(order => expect(order).to.have.property('status', 'prepared'))
355+
})
356+
.finally(() => expect(this.disabledSpy).to.not.have.been.called())
357+
})
358+
})
337359
})

0 commit comments

Comments
 (0)