'use strict';
const assert = require('assert');
const Mongoose = require('../../lib');
const mongoose = new Mongoose.Mongoose();
describe('custom casting', function() {
let originalCast;
beforeEach(function() {
originalCast = mongoose.Number.cast();
});
afterEach(function() {
mongoose.deleteModel('Test');
mongoose.Number.cast(originalCast);
});
it('casting error', function() {
const schema = new mongoose.Schema({
age: Number
});
const Model = mongoose.model('Test', schema);
const doc = new Model({ age: '二' });
const err = doc.validateSync();
err.message;
assert.ok(err.message.indexOf('Cast to Number failed for value "二" (type string) at path "age"') !== -1, err.message);
});
it('casting override', function() {
const originalCast = mongoose.Number.cast();
mongoose.Number.cast(v => {
if (v === '二') {
return 2;
}
return originalCast(v);
});
const schema = new mongoose.Schema({
age: Number
});
const Model = mongoose.model('Test', schema);
const doc = new Model({ age: '二' });
const err = doc.validateSync();
err;
doc.age;
assert.ifError(err);
assert.equal(doc.age, 2);
});
});