UNPKG

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
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); } ) });