@leansdk/leanrc
Version:
LeanRC is a MVC framework for creating graceful applications
1,128 lines (1,126 loc) • 42.2 kB
text/coffeescript
{ expect, assert } = require 'chai'
sinon = require 'sinon'
_ = require 'lodash'
RC = require '@leansdk/rc/lib'
LeanRC = require.main.require 'lib'
{
FuncG, SubsetG
RecordInterface
Record
Utils: { co }
} = LeanRC::
describe 'Record', ->
describe '.new', ->
facade = null
afterEach ->
facade?.remove?()
it 'should create record instance', ->
expect ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_001'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new {type: 'Test::TestRecord'}, collection
assert.instanceOf record, TestRecord, 'Not a TestRecord'
assert.instanceOf record, LeanRC::Record, 'Not a Record'
.to.not.throw Error
describe '.parseRecordName', ->
it 'should record name from text', ->
expect ->
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) ->
TestRecord
test: String
parsedName = TestRecord.parseRecordName 'test-record'
assert.deepEqual parsedName, ['Test', 'TestRecord'], 'Parsed incorrectly'
parsedName = TestRecord.parseRecordName 'Tester::Test'
assert.deepEqual parsedName, ['Tester', 'TestRecord'], 'Parsed incorrectly'
.to.not.throw Error
describe '#parseRecordName', ->
facade = null
afterEach ->
facade?.remove?()
it 'should record name in instance from text', ->
expect ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_003'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) ->
TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
vsRecord = TestRecord.new {type: 'Test::TestRecord'}, collection
parsedName = vsRecord.parseRecordName 'test-record'
assert.deepEqual parsedName, ['Test', 'TestRecord'], 'Parsed incorrectly'
parsedName = vsRecord.parseRecordName 'Tester::Test'
assert.deepEqual parsedName, ['Tester', 'TestRecord'], 'Parsed incorrectly'
.to.not.throw Error
describe '.parentClassNames', ->
it 'should get records class parent class names', ->
expect ->
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) ->
TestRecord
test: String
classNames = TestRecord.parentClassNames()
assert.deepEqual classNames, [ 'CoreObject', 'ChainsMixin', 'Record', 'TestRecord' ], 'Parsed incorrectly'
.to.not.throw Error
describe '.attribute, .attr', ->
it 'should define attributes for class', ->
expect ->
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
string: String
number: Number
date: Date
boolean: Boolean
assert.isTrue 'string' of TestRecord.attributes, 'Attribute `string` did not defined'
assert.isTrue 'number' of TestRecord.attributes, 'Attribute `number` did not defined'
assert.isTrue 'boolean' of TestRecord.attributes, 'Attribute `boolean` did not defined'
assert.isTrue 'date' of TestRecord.attributes, 'Attribute `date` did not defined'
.to.not.throw Error
describe '.computed, .comp', ->
it 'should define computed properties for class', ->
expect ->
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
string: String,
get: (aoData) -> aoData
number: Number,
get: (aoData) -> aoData
boolean: Boolean,
get: (aoData) -> aoData
date: Date,
get: (aoData) -> aoData
assert.isTrue 'string' of TestRecord.computeds, 'Computed property `string` did not defined'
assert.isTrue 'number' of TestRecord.computeds, 'Computed property `number` did not defined'
assert.isTrue 'boolean' of TestRecord.computeds, 'Computed property `boolean` did not defined'
assert.isTrue 'date' of TestRecord.computeds, 'Computed property `date` did not defined'
.to.not.throw Error
describe '#create, #isNew', ->
facade = null
afterEach ->
facade?.remove?()
it 'should create new record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_007'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new {type: 'Test::TestRecord'}, collection
assert.isTrue yield record.isNew(), 'Record is not new'
yield record.create()
assert.isFalse yield record.isNew(), 'Record is still new'
yield return
describe '#destroy', ->
facade = null
afterEach ->
facade?.remove?()
it 'should remove record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_008'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
, collection
assert.isTrue (yield record.isNew()), 'Record is not new'
yield record.create()
assert.isFalse (yield record.isNew()), 'Record is still new'
yield record.destroy()
assert.isFalse (yield collection.find(record.id))?, 'Record still in collection'
yield return
describe '#update', ->
facade = null
afterEach ->
facade?.remove?()
it 'should update record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_009'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 'test1'
, collection
yield record.create()
assert.equal (yield collection.find record.id).test, 'test1', 'Initial attr not saved'
record.test = 'test2'
yield record.update()
assert.equal (yield collection.find record.id).test, 'test2', 'Updated attr not saved'
yield return
describe '#clone', ->
facade = null
afterEach ->
facade?.remove?()
it 'should clone record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_010'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> Test::TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 'test1'
, collection
recordCopy = yield record.clone()
assert.equal record.test, recordCopy.test
assert.notEqual record.id, recordCopy.id
describe '#save', ->
facade = null
afterEach ->
facade?.remove?()
it 'should save record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_011'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 'test1'
, collection
yield record.save()
assert.isTrue (yield collection.find(record.id))?, 'Record is not saved'
yield return
describe '#delete', ->
facade = null
afterEach ->
facade?.remove?()
it 'should create and then delete a record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_012'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 'test1'
, collection
yield record.save()
assert.isTrue (yield collection.find(record.id))?, 'Record is not saved'
yield record.delete()
assert.isTrue (yield collection.find record.id).isHidden, 'Record is not marked as delete'
yield return
describe '#copy', ->
facade = null
afterEach ->
facade?.remove?()
it 'should create and then copy the record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_013'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 'test1'
, collection
yield record.save()
assert.isTrue (yield collection.find(record.id))?, 'Record is not saved'
newRecord = yield record.copy()
assert.isTrue (yield collection.find(newRecord.id))?, 'Record copy not saved'
yield return
describe '#decrement, #increment, #toggle', ->
facade = null
afterEach ->
facade?.remove?()
it 'should decrease/increase value of number attribute and toggle boolean', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_014'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 1000
has: true
, collection
yield record.save()
assert.equal record.test, 1000, 'Initial number value is incorrect'
assert.isTrue record.has, 'Initial boolean value is incorrect'
record.decrement 'test', 7
assert.equal record.test, 993, 'Descreased number value is incorrect'
record.increment 'test', 19
assert.equal record.test, 1012, 'Increased number value is incorrect'
record.toggle 'has'
assert.isFalse record.has, 'Toggled boolean value is incorrect'
record.toggle 'has'
assert.isTrue record.has, 'Toggled boolean value is incorrect'
yield return
describe '#updateAttribute, #updateAttributes', ->
facade = null
afterEach ->
facade?.remove?()
it 'should update attributes', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_015'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
, collection
record.save()
assert.equal record.test, 1000, 'Initial number value is incorrect'
assert.isTrue record.has, 'Initial boolean value is incorrect'
record.updateAttribute 'test', 200
assert.equal record.test, 200, 'Number attribue not updated correctly'
record.updateAttribute 'word', 'word'
assert.equal record.word, 'word', 'String attribue not updated correctly'
record.updateAttribute 'has', no
assert.equal record.has, no, 'Boolean attribue not updated correctly'
record.updateAttributes test: 888, has: yes, word: 'other'
assert.equal record.test, 888, 'Number attribue not updated correctly'
assert.equal record.has, yes, 'Boolean attribue not updated correctly'
assert.equal record.word, 'other', 'String attribue not updated correctly'
yield return
describe '#touch', ->
facade = null
afterEach ->
facade?.remove?()
it 'should save data with date', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_016'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class BasicTestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> BasicTestRecord
test: Number
has: Boolean
word: String
class TestRecord extends BasicTestRecord
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
name: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
name: 'name'
, collection
yield record.touch()
assert.equal (yield collection.find record.id).test, 1000, 'Number attribue `test` not updated correctly'
assert.equal (yield collection.find record.id).has, yes, 'Boolean attribue `has` not updated correctly'
assert.equal (yield collection.find record.id).word, 'test', 'String attribue `word` not updated correctly'
assert.equal (yield collection.find record.id).name, 'name', 'String attribue `name` not updated correctly'
assert.isAtMost (yield collection.find record.id).updatedAt, new Date(), 'Date attribue not updated correctly'
yield return
describe '#changedAttributes, #resetAttribute, #rollbackAttributes', ->
facade = null
afterEach ->
facade?.remove?()
it 'should test, reset and rollback attributes', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_017'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = TestRecord.new
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
, collection
yield record.save()
record.test = 888
assert.deepEqual (yield record.changedAttributes()).test, [ 1000, 888 ], 'Update is incorrect'
yield record.resetAttribute 'test'
assert.isUndefined (yield record.changedAttributes()).test, 'Reset is incorrect'
record.test = 888
record.has = no
record.word = 'other'
yield record.rollbackAttributes()
assert.equal record.test, 1000, 'Number attribue did not rolled back correctly'
assert.equal record.has, yes, 'Boolean attribue did not rolled back correctly'
assert.equal record.word, 'test', 'String attribue did not rolled back correctly'
yield return
describe '.normalize, .serialize', ->
facade = null
afterEach ->
facade?.remove?()
it 'should serialize and deserialize attributes', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_018'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield TestRecord.normalize
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
, collection
assert.propertyVal record, 'test', 1000, 'Property `test` not defined'
assert.propertyVal record, 'has', yes, 'Property `has` not defined'
assert.propertyVal record, 'word', 'test', 'Property `word` not defined'
assert.deepEqual record.changedAttributes(), {}, 'Attributes are altered'
snapshot = yield TestRecord.serialize record
assert.deepEqual snapshot, {
id: null
type: 'Test::TestRecord'
isHidden: no
rev: null
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
createdAt: null
updatedAt: null
deletedAt: null
}, 'Snapshot is incorrect'
yield return
describe '.recoverize, .objectize', ->
facade = null
afterEach ->
facade?.remove?()
it 'should recoverize and objectize attributes', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_019'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield TestRecord.recoverize
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
, collection
assert.propertyVal record, 'test', 1000, 'Property `test` not defined'
assert.propertyVal record, 'has', yes, 'Property `has` not defined'
assert.propertyVal record, 'word', 'test', 'Property `word` not defined'
assert.deepEqual record.changedAttributes(), {}, 'Attributes are altered'
snapshot = TestRecord.objectize record
assert.deepEqual snapshot, {
id: null
type: 'Test::TestRecord'
isHidden: no
rev: null
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
createdAt: null
updatedAt: null
deletedAt: null
}, 'JSON snapshot is incorrect'
yield return
describe '.makeSnapshot', ->
facade = null
afterEach ->
facade?.remove?()
it 'should make snapshot for ipoInternalRecord', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_020'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield TestRecord.normalize
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
, collection
assert.propertyVal record, 'test', 1000, 'Property `test` not defined'
assert.propertyVal record, 'has', yes, 'Property `has` not defined'
assert.propertyVal record, 'word', 'test', 'Property `word` not defined'
assert.deepEqual record.changedAttributes(), {}, 'Attributes are altered'
snapshot = TestRecord.makeSnapshot record
assert.deepEqual snapshot, {
id: null
type: 'Test::TestRecord'
isHidden: no
rev: null
test: 1000
has: yes
word: 'test'
createdAt: null
updatedAt: null
deletedAt: null
}, 'JSON snapshot is incorrect'
yield return
describe '.replicateObject', ->
facade = null
afterEach ->
facade?.remove?()
it 'should create replica for record', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_021'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield collection.create
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
replica = yield TestRecord.replicateObject record
assert.deepEqual replica,
type: 'instance'
class: 'TestRecord'
multitonKey: KEY
collectionName: collectionName
isNew: no
id: record.id
facade.remove()
yield return
describe '.restoreObject', ->
facade = null
afterEach ->
facade?.remove?()
it 'should restore record from replica', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_022'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
findRecordByName: FuncG(String, SubsetG RecordInterface),
default: (asType) -> TestRecord
test: Number
has: Boolean
word: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield collection.create
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
restoredRecord = yield TestRecord.restoreObject Test,
type: 'instance'
class: 'TestRecord'
multitonKey: KEY
collectionName: collectionName
isNew: no
id: record.id
assert.notEqual record, restoredRecord
assert.deepEqual record, restoredRecord
record = yield collection.build(
id: '123'
type: 'Test::TestRecord'
test: 1000
has: true
word: 'test'
)
restoredRecord = yield TestRecord.restoreObject Test,
type: 'instance'
class: 'TestRecord'
multitonKey: KEY
collectionName: collectionName
isNew: yes
attributes: id: '123', type: 'Test::TestRecord', test: 1000, has: yes, word: 'test'
assert.notEqual record, restoredRecord
assert.deepEqual record, restoredRecord
facade.remove()
yield return
describe '#afterCreate', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called after create', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_023'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
spyRunNotitfication = sinon.spy collection, 'recordHasBeenChanged'
record = yield collection.build {id: 123}
yield record.save()
assert.isTrue spyRunNotitfication.calledWith('createdRecord'), '`afterCreate` run incorrect'
yield return
describe '#beforeUpdate', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called before update', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_024'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield collection.build {id: 123}
yield record.save()
oldUpdatedAt = record.updatedAt
updated = yield record.save()
newUpdatedAt = record.updatedAt
assert.notEqual oldUpdatedAt, newUpdatedAt, 'Record not updated'
facade.remove()
describe '#beforeCreate', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called before create', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_025'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield collection.build({type: 'Test::TestRecord'})
assert.isUndefined record.id
yield record.save()
assert.isDefined record.id
facade.remove()
describe '#afterUpdate', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called after update', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_026'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
spyRunNotitfication = sinon.spy collection, 'recordHasBeenChanged'
record = yield collection.build {id: 123}
yield record.save()
updated = yield record.save()
assert.isTrue spyRunNotitfication.calledWith('updatedRecord'), '`afterUpdate` run incorrect'
facade.remove()
describe '#beforeDelete', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called before delete', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_027'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
record = yield collection.build {id: 123}
yield record.save()
oldUpdatedAt = record.updatedAt
deleted = yield record.delete()
newUpdatedAt = record.updatedAt
assert.notEqual oldUpdatedAt, newUpdatedAt, 'Record not updated'
assert.isDefined deleted.deletedAt, 'Record not deleted'
assert.isTrue deleted.isHidden, 'Record not hidden'
facade.remove()
describe '#afterDelete', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called after delete', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_028'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends Test::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
spyRunNotitfication = sinon.spy collection, 'recordHasBeenChanged'
record = yield collection.build {id: 123}
yield record.save()
deleted = yield record.delete()
assert.isTrue spyRunNotitfication.calledWith('deletedRecord'), '`afterDelete` run incorrect'
facade.remove()
describe '#afterDestroy', ->
facade = null
afterEach ->
facade?.remove?()
it 'should be called after destroy', ->
co ->
collectionName = 'TestsCollection'
KEY = 'TEST_RECORD_029'
facade = LeanRC::Facade.getInstance KEY
class Test extends LeanRC
class TestsCollection extends LeanRC::Collection
LeanRC::MemoryCollectionMixin
LeanRC::GenerateUuidIdMixin
Test
class TestRecord extends LeanRC::Record
Test
test: String
collection = TestsCollection.new collectionName,
delegate: 'TestRecord'
facade.registerProxy collection
spyRunNotitfication = sinon.spy collection, 'recordHasBeenChanged'
record = yield collection.build {id: 123}
yield record.save()
yield record.destroy()
assert.isTrue spyRunNotitfication.calledWith('destroyedRecord'), '`afterDestroy` run incorrect'
facade.remove()