Skip to content

Commit 9eba427

Browse files
committed
Don't fire afterSave hooks when saving with no changes.
Closes dresende#457
1 parent 23abc6b commit 9eba427

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

lib/Instance.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -222,11 +222,15 @@ function Instance(Model, opts) {
222222
finish();
223223
}, false);
224224
} else {
225-
saveAssociations(function (err) {
226-
runAfterSaveActions(function () {
227-
if (err) return cb(err);
225+
saveAssociations(function (err, assocSaved) {
226+
if (saved || assocSaved) {
227+
runAfterSaveActions(function () {
228+
if (err) return cb(err);
229+
finish();
230+
}, false, err);
231+
} else {
228232
finish();
229-
}, false, err);
233+
}
230234
});
231235
}
232236
}
@@ -261,11 +265,11 @@ function Instance(Model, opts) {
261265
if (errored) return;
262266

263267
errored = true;
264-
return cb(err);
268+
return cb(err, true);
265269
}
266270

267271
if (--pending === 0) {
268-
return cb();
272+
return cb(null, true);
269273
}
270274
});
271275
};
@@ -317,7 +321,7 @@ function Instance(Model, opts) {
317321
}
318322

319323
if (--pending === 0) {
320-
return cb();
324+
return cb(null, false);
321325
}
322326
};
323327
var saveInstanceExtra = function (cb) {

test/integration/hook.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,13 +356,30 @@ describe("Hook", function() {
356356
describe("afterSave", function () {
357357
beforeEach(setup());
358358

359-
it("should trigger after saving an instance", function (done) {
360-
Person.create([{ name: "John Doe" }], function () {
359+
it("should trigger after creating an instance", function (done) {
360+
Person.create({ name: "John Doe" }, function (err, john) {
361+
should.not.exist(err);
362+
361363
triggeredHooks.afterSave.should.be.a("number");
362364
triggeredHooks.beforeSave.should.be.a("number");
363365
triggeredHooks.afterSave.should.not.be.below(triggeredHooks.beforeSave);
366+
done();
367+
});
368+
});
364369

365-
return done();
370+
it("should trigger after saving an instance", function (done) {
371+
Person.create({ name: "John Doe" }, function (err, john) {
372+
should.not.exist(err);
373+
374+
john.name = "John Doe 2";
375+
376+
triggeredHooks = {};
377+
john.save(function (err) {
378+
triggeredHooks.afterSave.should.be.a("number");
379+
triggeredHooks.beforeSave.should.be.a("number");
380+
triggeredHooks.afterSave.should.not.be.below(triggeredHooks.beforeSave);
381+
done();
382+
});
366383
});
367384
});
368385

0 commit comments

Comments
 (0)