Skip to content

Commit 978f5cc

Browse files
committed
fix: catch lambda invocation exceptions and warn about them. fixes #12
1 parent fd50b28 commit 978f5cc

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/input-handler.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,12 @@ module.exports = function bindInputHandler (update, pragmas, inv, invoke) {
139139
let msg = `Invoking @${pragma} ${name}`
140140
msg += ` with ${mockName === 'empty' ? 'empty' : `'${mockName}'`} payload`
141141
update.status(msg)
142-
await invoke({ pragma, name, payload })
142+
try {
143+
await invoke({ pragma, name, payload })
144+
}
145+
catch (e) {
146+
update.warn(e)
147+
}
143148
start()
144149
}
145150
}

test/unit/input-handler-test.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ function createInvMock () {
1414
return { inv: { _project: { cwd: process.cwd(), preferences: {} } } }
1515
}
1616
function createLogMock () {
17-
return { status: () => ({}) }
17+
return { status: () => ({}), warn: () => ({}) }
1818
}
1919
function createEnquirerMock () {
2020
return { prompt: async () => ({}) }
@@ -80,4 +80,18 @@ test('Should prompt for lambda selection and invoke matching lambda', async t =>
8080
await handler('i')
8181
const invoked = intercept()
8282
t.equal(invoked.length, 1, 'lambda invoke called')
83+
t.equal(invoked[0].args[0].pragma, 'events', 'correct pragma invoked')
84+
t.equal(invoked[0].args[0].name, 'test-event', 'correct lambda name invoked')
85+
})
86+
87+
test('Should be able to recover from exception being raised by invoked lambda', async t => {
88+
let mocks = createMocks()
89+
t.capture(mocks.enquirer, 'prompt', async () => ({ lambda: '@events test-event' }))
90+
t.capture(mocks, 'invoke', async () => { throw new Error('boom') })
91+
let logcept = t.capture(mocks.logger, 'warn')
92+
mocks.invMock.inv['events'] = [ { name: 'test-event' } ]
93+
let handler = mockHandlerFactory(mocks)(mocks.logger, pragmas, mocks.invMock.inv, mocks.invoke)
94+
await handler('i')
95+
let logged = logcept()
96+
t.match(logged[0].args[0].message, /boom/, 'lambda exception gets logged as warning')
8397
})

0 commit comments

Comments
 (0)