base-domain
Version:
simple module to help build Domain-Driven Design
126 lines (85 loc) • 4.11 kB
text/coffeescript
facade = require('../create-facade').create()
Facade = facade.constructor
DictFactory = Facade.DictFactory
describe 'DictFactory', ->
before ->
class Hobby extends Facade.Entity
:
name: .STRING
class NonEntity extends Facade.BaseModel
:
name: .STRING
class HobbyRepository extends Facade.MasterRepository
: 'hobby'
class HobbyDict extends Facade.BaseDict
:
ne: .MODEL 'non-entity'
st: .STRING
: 'hobby'
: (item) -> item.name
facade.addClass('hobby', Hobby)
facade.addClass('non-entity', NonEntity)
facade.addClass('hobby-dict', HobbyDict)
facade.addClass('hobby-repository', HobbyRepository)
= facade.createFactory('hobby', true)
describe 'createEmpty', ->
before ->
hobbyDictFactory = DictFactory.create('hobby-dict', )
= hobbyDictFactory.createEmpty()
it 'creates dict', ->
expect().to.be.instanceof Facade.BaseDict
expect(.items).to.be.an 'object'
expect(.loaded).to.be.true
it 'creates empty dict', ->
expect(.items).to.eql {}
expect(.ids).to.have.length 0
describe 'createFromObject', ->
it 'regards arg as object when arg has items', ->
obj = items:
keyboard : name : 'keyboard'
programming : name : 'programming'
hobbyDictFactory = DictFactory.create('hobby-dict', )
dict = hobbyDictFactory.createFromObject(obj)
expect(dict.items).to.have.property 'keyboard'
expect(dict.items).to.have.property 'programming'
it 'regards arg as dict object when arg has ids', (done) ->
obj = ids: ['dummy']
hobbyDictFactory = DictFactory.create('hobby-dict', )
dict = hobbyDictFactory.createFromObject(obj)
dict.on 'loaded', ->
expect(Object.keys dict.items).to.have.length.above 0
done()
it 'attaches properties', ->
obj =
ne:
name: 'non-entity-prop'
str: 'awesome hobbies'
items:
keyboard : name : 'keyboard'
programming : name : 'programming'
hobbyDictFactory = DictFactory.create('hobby-dict', )
dict = hobbyDictFactory.createFromObject(obj)
expect(dict).to.have.property 'ne'
expect(dict.ne).to.be.instanceof facade.getModel('non-entity')
expect(dict.ne).to.have.property 'name', 'non-entity-prop'
expect(dict.str).to.equal 'awesome hobbies'
expect(dict.items).to.have.property 'programming'
expect(dict.items).to.have.property 'keyboard'
describe 'createFromArray', ->
it 'regards string array as id dic', (done) ->
hobbyDictFactory = DictFactory.create('hobby-dict', )
dict = hobbyDictFactory.createFromArray(['dummy'])
dict.on 'loaded', ->
expect(Object.keys dict.items).to.have.length.above 0
done()
it 'regards object array as pre-model dict', (done) ->
data = [ {id: 3, name: 'keyboard'}, {id: 2, name: 'sailing'} ]
hobbyDictFactory = DictFactory.create('hobby-dict', )
dict = hobbyDictFactory.createFromArray(data)
dict.on 'loaded', ->
Hobby = facade.getModel 'hobby'
expect(Object.keys dict.items).to.have.length 2
expect(dict.items.keyboard).to.be.instanceof Hobby
expect(dict.items.sailing).to.be.instanceof Hobby
expect(dict.ids).to.eql [3,2]
done()