mogrified.forEach((o, i) => { makeSure(o.str).is.a.String; makeSure(o.num).is.a.Number; makeSure(o.bln).is.a.Boolean; makeSure(o.dte).is.a.Date; makeSure(o.dontDeleteMe).is.a.String; });
it('a nested object should mogrify based on a model object', () => { let model = { str: String, obj: { num: Number, otherObj: { bln: Boolean } } }; let input = { str: true, obj: { num: '1', otherObj: { bln: 0 } } }; let mogrified = mogrify(model, input); makeSure(mogrified.str).is.a.String; makeSure(mogrified.obj).is.an.Object; makeSure(mogrified.obj.num).is.a.Number; makeSure(mogrified.obj.otherObj).is.an.Object; makeSure(mogrified.obj.otherObj.bln).is.a.Boolean; assert.equal(mogrified.str, 'true'); assert.equal(mogrified.obj.num, 1); assert.equal(mogrified.obj.otherObj.bln, false); }); // end nested object mogrification
it('should mogrify object input patter #' + i, () => { let mogrified = (mogrify(model, input)); makeSure(mogrified.str).is.a.String; makeSure(mogrified.num).is.a.Number; makeSure(mogrified.bln).is.a.Boolean; makeSure(mogrified.dte).is.a.Date; });
it('should make it possible to use custom functions', () => { let model = { cus: function(input) { return input + '-bar'; } }; let input = { cus: 'foo', dontDeleteMe: 'dontDeleteMe' }; let mogrified = mogrify(model, input); makeSure(mogrified.cus).is.a.String; makeSure(mogrified.dontDeleteMe).is.a.String; assert.equal(mogrified.cus, 'foo-bar'); assert.equal(mogrified.dontDeleteMe, 'dontDeleteMe'); }); // end custom function test
it('should strip undefined properties from input when strict = true', () => { let model = { str: String, num: Number, bln: Boolean, dte: Date }; let input = { str: true, num: '1', bln: 0, dte: 0, deleteMe: 'deleteMe' }; let options = { strict: true }; let mogrified = mogrify(model, input, options); makeSure(mogrified.deleteMe).is.Undefined; }); // end custom test
const passthrougher = () => ({ tap(cb) { let { objectMode } = this, stream = new PassThrough({ objectMode }); makeSure(cb).is.a.Function; stream.on('data', (data) => { if (objectMode) cb(data); else if (!objectMode) cb(data.toString()); }); return this.pipe(stream); }, first(cb) { let { objectMode } = this, stream = new PassThrough({ objectMode }), done = false; makeSure(cb).is.a.Function; stream.on('data', (data) => { if (done) return; done = true; if (objectMode) cb(data); else if (!objectMode) cb(data.toString()); }); return this.pipe(stream); }, last(cb) { let { objectMode } = this, stream = new PassThrough({ objectMode }), last = {}; makeSure(cb).is.a.Function; stream.on('data', (data) => last = data); stream.on('finish', () => { if (objectMode) cb(last); else if (!objectMode) cb(last.toString()); }); return this.pipe(stream); }, when(condition, cb) { let { objectMode } = this, stream = new PassThrough({ objectMode }); makeSure(condition).is.a.Function; makeSure(cb).is.a.Function; stream.on('data', (data) => { if (condition(data)) cb(data); }); return this.pipe(stream); }, done(cb) { makeSure(cb).is.a.Function; this.stream.on('end', () => cb()); return this; } });
mogrified.forEach((value) => makeSure(value).is.a.String);
mogrified.forEach((value) => ((isNaN(value.valueOf())) ? true : makeSure(value).is.a.Date));
mogrified.forEach((value) => makeSure(value).is.a.Boolean);
mogrified.forEach((value) => makeSure(value).is.a.Number);