class-o-mat-data-object-plugin
Version:
a plugin to allow a class-o-mat instance to output the full tree of its own parameters and any of its children
89 lines (66 loc) • 2.44 kB
JavaScript
import Bunyan from 'bunyan';
const log = Bunyan.createLogger({name: "BasicManualTest"});
import mocha from 'mocha';
import { expect } from 'chai';
import ClassOMat from 'class-o-mat';
import dOPlugin from '../src/index';
class BaseAlbum { TYPE = 'ALBUM'};
class BaseMusician { TYPE = 'MSN'};
class BaseSong { TYPE = 'SONG'};
const albumOMatDO = new ClassOMat('albumOMatDOM');
const musicianOMat = new ClassOMat('musicianOMat');
const songOMat = new ClassOMat('songOMat');
songOMat.BaseClass(BaseSong).field('title');
musicianOMat.BaseClass(BaseMusician).field('name');
albumOMatDO.BaseClass(BaseAlbum)
.field('title').validate().string().$()
.again('group')
.field('year')
.validate().uint().greaterThan(1900).and().lessThan((new Date()).getFullYear()).$()
.addChild(musicianOMat).namedChildren(true).as$('musicians')
.addChild(songOMat).as$('songs');
dOPlugin.connect(albumOMatDO);
const Album = albumOMatDO.$();
describe(`Testing ClassOMat dataObject plugin`,
()=>{
let album;
let song;
let musician;
const albumData = {
title: 'A Momentary Lapse of Reason',
group: 'Pink Floyd',
year: 1987,
songs: [
{title: "Learning to Fly"},
{title: "On the Turning Away"}
],
musicians: {
'guitar': { name: 'David Gilmour'},
'drums': { name: 'Nick Mason'},
}
}
it(`Should be able to create an album and associated information.`,
()=>{
album = new Album();
album.title('A Momentary Lapse of Reason')
.group('Pink Floyd')
.year(1987);
expect(album.TYPE).to.equal('ALBUM');
expect(album.___isClassOMat()).to.equal(true);
song = album.songs().title('Learning to Fly');
expect(song.TYPE).to.equal('SONG');
expect(song.___isClassOMat()).to.equal(true);
song = album.songs().title('On the Turning Away');
musician = album.musicians('guitar').name('David Gilmour');
expect(musician.TYPE).to.equal('MSN');
expect(musician.___isClassOMat()).to.equal(true);
album.musicians('drums').name('Nick Mason');
const output = album.___data();
const jsonOutput = album.___json();
expect(typeof output).to.equal('object');
expect(output).to.deep.equal(albumData);
expect(typeof jsonOutput).to.equal('string');
expect(JSON.parse(jsonOutput)).to.deep.equal(albumData);
}
)
});