base-domain
Version:
simple module to help build Domain-Driven Design
131 lines (85 loc) • 3.95 kB
text/coffeescript
facade = require './init'
Hobby = facade.getModel 'hobby'
describe 'BaseRepository', ->
describe 'factory', ->
it 'is created by the model name', ->
repo = facade.createRepository('hobby')
HobbyFactory = facade.getFactory('hobby')
expect(repo.factory).to.be.instanceof HobbyFactory
describe 'save', ->
repo = facade.createRepository('hobby')
it 'returns instance of Model', (done) ->
repo.save(name: 'music').then (model) =>
expect(model).to.be.instanceof Hobby
done()
it 'returns instance of Model with createdAt, updatedAt when configured as such', (done) ->
memberRepo = facade.createRepository('member')
memberRepo.save(firstName: 'Shin').then (model) =>
arg1 = model.arg1
expect(arg1).to.have.property('mCreatedAt')
expect(arg1).to.have.property('mUpdatedAt')
expect(new Date(arg1.mCreatedAt)).to.be.instanceof Date
expect(new Date(arg1.mUpdatedAt)).to.be.instanceof Date
done()
it 'returns instance of Model with relation ids', (done) ->
memberFactory = facade.createFactory('member')
member = memberFactory.createFromObject
id: 12
firstName: 'Shin'
age: 29
registeredAt: new Date()
hobbies: [
{ id: 1, name: 'keyboard' }
{ id: 2, name: 'ingress' }
{ id: 3, name: 'Shogi' }
]
dFactory = facade.createFactory('diary')
diary = dFactory.createFromObject
title : 'crazy about room335'
comment: 'progression of room335 is wonderful'
author: member
date : new Date()
dRepo = facade.createRepository('diary')
dRepo.save(diary).then (model) =>
arg1 = model.arg1
expect(arg1).to.have.property('memberId', 12)
done()
describe 'get', ->
repo = facade.createRepository('hobby')
it 'returns instance of Model', (done) ->
repo.get(1).then (model) =>
expect(model).to.be.instanceof Hobby
done()
describe 'query', ->
repo = facade.createRepository('hobby')
it 'returns array of models', (done) ->
repo.query().then (models) =>
expect(models).to.be.instanceof Array
expect(models[0]).to.be.instanceof Hobby
done()
describe 'singleQuery', ->
repo = facade.createRepository('hobby')
it 'returns instance of Model', (done) ->
repo.singleQuery().then (model) =>
expect(model).to.be.instanceof Hobby
done()
describe 'delete', ->
repo = facade.createRepository('hobby')
it 'returns boolean', (done) ->
repo.delete(id: '123').then (isDeleted) =>
expect(isDeleted).to.be.true
done()
describe 'update', ->
repo = facade.createRepository('hobby')
it 'returns instance of Model', (done) ->
repo.update('123', name: 'tennis').then (model) =>
expect(model).to.be.instanceof Hobby
done()
it 'returns instance of Model with updatedAt when configured as such', (done) ->
memberRepo = facade.createRepository('member')
memberRepo.update('123', firstName: 'Shin').then (model) =>
arg2 = model.arg2
expect(arg2).not.to.have.property('mCreatedAt')
expect(arg2).to.have.property('mUpdatedAt')
expect(new Date(arg2.mUpdatedAt)).to.be.instanceof Date
done()