@leansdk/leanrc
Version:
LeanRC is a MVC framework for creating graceful applications
80 lines (78 loc) • 2.92 kB
text/coffeescript
{ expect, assert } = require 'chai'
sinon = require 'sinon'
_ = require 'lodash'
LeanRC = require.main.require 'lib'
{
NilT
FuncG, SubsetG, UnionG,
RecordInterface, QueryInterface, CursorInterface, CollectionInterface
Utils: { co }
} = LeanRC::
describe 'GenerateAutoincrementIdMixin', ->
describe '#generateId', ->
facade = null
afterEach ->
facade?.remove?()
it 'should generate id for itemsusing autoincrement', ->
co ->
KEY = 'FACADE_TEST_AUTOINCREMENT_ID_001'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestRecord extends LeanRC::Record
Test
init: FuncG([Object, CollectionInterface], NilT),
default: ->
arguments...
= 'Test::TestRecord'
return
class Queryable extends LeanRC::Collection
LeanRC::QueryableCollectionMixin
LeanRC::GenerateAutoincrementIdMixin
Test
delegate: SubsetG(RecordInterface),
default: TestRecord
parseQuery: FuncG(
[UnionG Object, QueryInterface]
UnionG Object, String, QueryInterface
),
default: (aoQuery) -> yield return aoQuery
executeQuery: FuncG(
[UnionG Object, String, QueryInterface]
CursorInterface
),
default: (aoParsedQuery) ->
data = []
isCustomReturn = no
if (property = aoParsedQuery['$max'])?
isCustomReturn = yes
property = property.replace '@doc.', ''
sorted = _.sortBy , (doc) -> doc[property]
doc = _.last sorted
data.push doc[property] if doc?
voCursor = if isCustomReturn
LeanRC::Cursor.new null, data
else
LeanRC::Cursor.new @, data
yield return voCursor
take: FuncG([UnionG String, Number], RecordInterface),
default: (id) ->
data = _.find , { id }
throw new Error 'NOT_FOUND' unless data?
yield data
push: FuncG(RecordInterface, RecordInterface),
default: (record) ->
item = yield .serialize record
.push item
yield return record
facade.registerProxy Queryable.new KEY, []
collection = facade.retrieveProxy KEY
for i in [ 1 .. 10 ]
{ id } = yield collection.create({type: 'Test::TestRecord'})
assert.equal i, id
yield return