base-domain
Version:
simple module to help build Domain-Driven Design
155 lines (80 loc) • 3.94 kB
text/coffeescript
facade = require('../create-facade').create('domain')
MasterRepository = facade.constructor.MasterRepository
Hobby = facade.getModel 'hobby'
describe 'MasterRepository', ->
describe 'storeMasterTable', ->
it 'is true by default', ->
expect(MasterRepository.storeMasterTable).to.be.true
it 'is true by default in extenders', ->
class Child extends MasterRepository
expect(Child.storeMasterTable).to.be.true
it 'is undefined in BaseRepository', ->
BaseRepository = facade.constructor.BaseRepository
expect(BaseRepository.storeMasterTable).not.to.be.true
describe 'loaded', ->
it 'returns false when class is just created', ->
class Child extends MasterRepository
expect(Child.loaded()).to.be.false
it 'returns true when loaded', ->
class HobbyRepository extends MasterRepository
: 'hobby'
getFacade: -> facade
expect(HobbyRepository.modelsById).not.to.exist
expect(HobbyRepository.loaded()).to.be.false
HobbyRepository.load().then (isSucceed) ->
expect(HobbyRepository.loaded()).to.be.true
done()
describe 'load', ->
it 'loads models to @constructor.modelsById', (done) ->
class HobbyRepository extends MasterRepository
: 'hobby'
getFacade: -> facade
expect(HobbyRepository.modelsById).not.to.exist
expect(HobbyRepository.loaded()).to.be.false
HobbyRepository.load().then (isSucceed) ->
expect(HobbyRepository.modelsById).to.be.an 'object'
expect(HobbyRepository.loaded()).to.be.true
expect(HobbyRepository.modelsById.dummy).to.be.instanceof Hobby
expect(isSucceed).to.be.true
done()
it 'fails when @storeMasterTable is off', (done) ->
class HobbyRepository extends MasterRepository
: off
HobbyRepository.load().then (isSucceed) ->
expect(isSucceed).to.be.false
done()
describe 'getByIdSync', ->
class HobbyRepository extends MasterRepository
: 'hobby'
getFacade: -> facade
it 'returns null when not loaded', ->
dummyHobby = new HobbyRepository().getByIdSync 'dummy'
expect(dummyHobby).to.be.null
it 'returns model by id synchronously', (done) ->
HobbyRepository.load().then ->
dummyHobby = new HobbyRepository().getByIdSync 'dummy'
expect(dummyHobby).to.be.instanceof Hobby
done()
it 'returns model the same reference as pooled', (done) ->
HobbyRepository.load().then ->
dummyHobby = new HobbyRepository().getByIdSync 'dummy'
expect(dummyHobby).to.equal HobbyRepository.modelsById.dummy
done()
it 'returns null when no object found by id', (done) ->
HobbyRepository.load().then ->
hobby = new HobbyRepository().getByIdSync 'xxx'
expect(hobby).to.be.null
done()
describe 'getAllSync', ->
class HobbyRepository extends MasterRepository
: 'hobby'
getFacade: -> facade
it 'returns empty array when not loaded', ->
hobbies = new HobbyRepository().getAllSync()
expect(hobbies).to.eql []
it 'returns array of models', (done) ->
HobbyRepository.load().then ->
hobbies = new HobbyRepository().getAllSync()
expect(hobbies).to.be.instanceof Array
expect(hobbies[0]).to.be.instanceof Hobby
done()