blow-data
Version:
Data access layer for Blow.
107 lines (91 loc) • 2.72 kB
text/typescript
/// <reference path="../typings/tsd.d.ts" />
import * as chai from 'chai';
import * as helpers from './helpers';
import {ModelMetadata} from '../src/ModelMetadata';
import {BaseModel} from '../src/BaseModel';
import * as models from './fixtures/models';
import {manager} from '../src/manager';
const expect = chai.expect;
describe('BaseModel', () => {
before(done => {
manager.init().subscribe(() => {
done();
}, err => console.log(err));
})
helpers.checkClassExport(BaseModel);
describe('assign data', () => {
it('via constructor', () => {
const book = new models.Book({
title: 'Book title',
price: '10'
});
expect(book.title).to.be.equal('Book title');
expect(book.price).to.be.equal(10);
expect(book.available).to.be.equal(true);
});
it('via setters', () => {
const book = new models.Book();
book.title = 'Title';
book.price = 20;
book.available = false;
expect(book.title).to.be.equal('Title');
expect(book.price).to.be.equal(20);
expect(book.available).to.be.equal(false);
});
});
describe('validators', () => {
afterEach(done => {
models.Book.destroy().subscribe(() => done());
});
it('decorators', done => {
const book = new models.Book({title: 'title', price: 5, no: 1});
book.validate()
.mergeMap(result => {
expect(result.isValid).to.be.true;
return book.save();
})
.mergeMap(() => {
const book = new models.Book({title: 'title 1', price: 1, no: 1});
return book.validate();
})
.subscribe(result => {
expect(result['errors'][0].property).to.be.equal('no');
expect(result['errors'][0].type).to.be.equal('custom');
done();
});
});
});
it('.toJSON(), .inspect()', () => {
const book = new models.Book({
title: 'Book title',
promo: true
});
const author = new models.Author({
id: 'authorId'
});
(<any>book).author(author);
expect(book.toJSON()).to.be.deep.equal({
title: 'Book title',
available: true,
authorId: 'authorId',
promo: true
});
expect(book.toSafeJSON()).to.be.deep.equal({
title: 'Book title',
available: true,
authorId: 'authorId'
});
expect(book.toJSON()).to.be.deep.equal(book.inspect());
});
it('embeded models', () => {
const book = new models.Book({
title: 'Book title',
edition: {
no: '10'
}
});
expect(book.edition).to.be.instanceof(models.Edition);
expect(book.edition.no).to.be.equal(10);
});
});