UNPKG

@conceptho/adonis-service-layer

Version:
83 lines (59 loc) 2.5 kB
const test = require('japa') const supertest = require('supertest') const Route = require('@adonisjs/framework/src/Route/Manager') const { ioc } = require('@adonisjs/fold') test.group('service context', group => { group.before(() => { ioc.restore() const { Model } = use('Conceptho/Models') ioc.fake('App/Models/User', () => class User extends Model { }) const server = use('Server') server.registerNamed({ service: 'Conceptho/Middlewares/UseServiceContext' }) server.listen('localhost', 3333) }) group.after(() => { use('Server').close() }) group.afterEach(() => { }) test('service context should call hooks', async assert => { let errorCalled = false let successCalled = false Route.get('/1', ({ response, serviceContext }) => { serviceContext.onError(() => { errorCalled = true; return true }) serviceContext.onSuccess(() => { successCalled = true; return true }) return response.status(400).send('oops') }).middleware('service') await supertest('http://localhost:3333').get('/1') assert.isTrue(errorCalled) assert.isFalse(successCalled) errorCalled = false successCalled = false Route.get('/2', ({ response, serviceContext }) => { serviceContext.onError(() => { errorCalled = true; return true }) serviceContext.onSuccess(() => { successCalled = true; return true }) return response.status(200).send('ok') }).middleware('service') await supertest('http://localhost:3333').get('/2') assert.isFalse(errorCalled) assert.isTrue(successCalled) }) test('should commit transaction on success', async assert => { const User = use('App/Models/User') Route.get('/3', async ({ response, serviceContext }) => { await User.create({ email: 'aprias' }, serviceContext.transaction) return response.status(200).send('ok') }).middleware('service') await supertest('http://localhost:3333').get('/3') assert.isNotNull(await User.query().where({ email: 'aprias' }).first()) }) test('should rollback transaction on error', async assert => { const User = use('App/Models/User') Route.get('/4', async ({ response, serviceContext }) => { await User.create({ email: '111' }, serviceContext.transaction) return response.status(400).send('oops') }).middleware('service') await supertest('http://localhost:3333').get('/4') assert.isNull(await User.query().where({ email: '111' }).first()) }) })