不要怂,就是干,撸起袖子干!

Commit f5873a90 by Jan Aagaard Meier

Fix for default values and setters

1 parent 2dfd1cec
...@@ -116,7 +116,6 @@ module.exports = (function() { ...@@ -116,7 +116,6 @@ module.exports = (function() {
if (typeof key === "object") { if (typeof key === "object") {
values = key values = key
options = value options = value
options || (options = {}) options || (options = {})
if (options.reset) { if (options.reset) {
...@@ -161,7 +160,7 @@ module.exports = (function() { ...@@ -161,7 +160,7 @@ module.exports = (function() {
} else { } else {
options || (options = {}) options || (options = {})
originalValue = this.dataValues[key] originalValue = this.dataValues[key]
// If not raw, and there's a customer setter // If not raw, and there's a customer setter
if (!options.raw && this._customSetters[key]) { if (!options.raw && this._customSetters[key]) {
this._customSetters[key].call(this, value, key) this._customSetters[key].call(this, value, key)
...@@ -640,8 +639,9 @@ module.exports = (function() { ...@@ -640,8 +639,9 @@ module.exports = (function() {
// private // private
var initValues = function(values, options) { var initValues = function(values, options) {
var defaults, var defaults
key; , defaultsOptions = _.defaults({ raw: true}, options)
, key;
values = values && _.clone(values) || {} values = values && _.clone(values) || {}
...@@ -670,7 +670,7 @@ module.exports = (function() { ...@@ -670,7 +670,7 @@ module.exports = (function() {
delete defaults[this.Model._timestampAttributes.updatedAt]; delete defaults[this.Model._timestampAttributes.updatedAt];
} }
if (this.Model._timestampAttributes.createdAt && defaults[this.Model._timestampAttributes.deletedAt]) { if (this.Model._timestampAttributes.deletedAt && defaults[this.Model._timestampAttributes.deletedAt]) {
this.dataValues[this.Model._timestampAttributes.deletedAt] = Utils.toDefaultValue(defaults[this.Model._timestampAttributes.deletedAt]); this.dataValues[this.Model._timestampAttributes.deletedAt] = Utils.toDefaultValue(defaults[this.Model._timestampAttributes.deletedAt]);
delete defaults[this.Model._timestampAttributes.deletedAt]; delete defaults[this.Model._timestampAttributes.deletedAt];
} }
...@@ -678,7 +678,7 @@ module.exports = (function() { ...@@ -678,7 +678,7 @@ module.exports = (function() {
if (Object.keys(defaults).length) { if (Object.keys(defaults).length) {
for (key in defaults) { for (key in defaults) {
if (!values.hasOwnProperty(key)) { if (!values.hasOwnProperty(key)) {
values[key] = Utils.toDefaultValue(defaults[key]) this.set(key, Utils.toDefaultValue(defaults[key]), defaultsOptions)
} }
} }
} }
......
...@@ -844,13 +844,13 @@ describe(Support.getTestDialectTeaser("HasMany"), function() { ...@@ -844,13 +844,13 @@ describe(Support.getTestDialectTeaser("HasMany"), function() {
, spy = sinon.spy() , spy = sinon.spy()
this.User.create({ username: 'foo' }).success(function(user) { this.User.create({ username: 'foo' }).success(function(user) {
self.Task.create({ title: 'task1' }).success(function(task1) { self.Task.create({ id: 12, title: 'task1' }).success(function(task1) {
self.Task.create({ title: 'task2' }).success(function(task2) { self.Task.create({ id: 15, title: 'task2' }).success(function(task2) {
user.setTasks([task1, task2]).on('sql', spy).on('sql', _.after(2, function (sql) { user.setTasks([task1, task2]).on('sql', spy).on('sql', _.after(2, function (sql) {
expect(sql).to.have.string("INSERT INTO") var tickChar = (Support.getTestDialect() === 'postgres') ? '"' : '`'
expect(sql).to.have.string("VALUES (1,1),(1,2)") expect(sql).to.have.string("INSERT INTO %TasksUsers% (%UserId%,%TaskId%) VALUES (1,12),(1,15)".replace(/%/g, tickChar))
})).success(function () { })).success(function () {
expect(spy.calledTwice).to.be.ok expect(spy.calledTwice).to.be.ok // Once for SELECT, once for INSERT
done() done()
}) })
}) })
......
...@@ -253,6 +253,31 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () { ...@@ -253,6 +253,31 @@ describe(Support.getTestDialectTeaser("DAOFactory"), function () {
}) })
}) })
it("returns proper defaultValues after save when setter is set", function(done) {
var titleSetter = sinon.spy()
, Task = this.sequelize.define('TaskBuild', {
title: {
type: Sequelize.STRING(50),
allowNull: false,
defaultValue: ''
}
}, {
setterMethods: {
title: titleSetter
}
})
Task.sync({force: true}).success(function() {
Task.build().save().success(function(record) {
expect(record.title).to.be.a('string')
expect(record.title).to.equal('')
expect(titleSetter.notCalled).to.be.ok // The setter method should not be invoked for default values
done()
}).error(done)
}).error(done)
})
it('should work with both paranoid and underscored being true', function(done) { it('should work with both paranoid and underscored being true', function(done) {
var UserTable = this.sequelize.define('UserCol', { var UserTable = this.sequelize.define('UserCol', {
aNumber: Sequelize.INTEGER aNumber: Sequelize.INTEGER
......
...@@ -1080,7 +1080,7 @@ describe(Support.getTestDialectTeaser("DAO"), function () { ...@@ -1080,7 +1080,7 @@ describe(Support.getTestDialectTeaser("DAO"), function () {
it('returns a response that can be stringified', function(done) { it('returns a response that can be stringified', function(done) {
var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true }) var user = this.User.build({ username: 'test.user', age: 99, isAdmin: true })
expect(JSON.stringify(user)).to.deep.equal('{"username":"test.user","age":99,"isAdmin":true,"id":null}') expect(JSON.stringify(user)).to.deep.equal('{"id":null,"username":"test.user","age":99,"isAdmin":true}')
done() done()
}) })
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!