diff --git a/lib/model.js b/lib/model.js index cbbd1bbe4af4..4b0f926cdbdc 100644 --- a/lib/model.js +++ b/lib/model.js @@ -1999,7 +1999,7 @@ class Model { } // Bypass a possible overloaded findOne - return await this.findOne(options); + return await Model.findOne.call(this, options); } /** @@ -2034,9 +2034,9 @@ class Model { } // Bypass a possible overloaded findAll. - return await this.findAll(_.defaults(options, { + return await Model.findAll.call(this, (_.defaults(options, { plain: true, - })); + }))); } /** diff --git a/test/unit/model/bulkcreate.test.js b/test/unit/model/bulk-create.test.js similarity index 100% rename from test/unit/model/bulkcreate.test.js rename to test/unit/model/bulk-create.test.js diff --git a/test/unit/model/findall.test.js b/test/unit/model/find-all.test.js similarity index 100% rename from test/unit/model/findall.test.js rename to test/unit/model/find-all.test.js diff --git a/test/unit/model/find-by-pk.test.js b/test/unit/model/find-by-pk.test.js new file mode 100644 index 000000000000..d87dfa0399e7 --- /dev/null +++ b/test/unit/model/find-by-pk.test.js @@ -0,0 +1,42 @@ +'use strict'; + +const chai = require('chai'); + +const expect = chai.expect; +const Support = require('../support'); + +const Sequelize = Support.Sequelize; +const Op = Sequelize.Op; +const current = Support.sequelize; +const sinon = require('sinon'); +const DataTypes = require('../../../lib/data-types'); + +describe(Support.getTestDialectTeaser('Model'), () => { + describe('method findByPk', () => { + beforeEach(function () { + this.stub = sinon.stub(Sequelize.Model, 'findAll').resolves(); + }); + afterEach(() => { + sinon.restore(); + }); + + it('should call internal findOne() method if findOne() is overridden', async () => { + const Model = current.define('model', { + unique1: { + type: DataTypes.INTEGER, + unique: 'unique', + }, + unique2: { + type: DataTypes.INTEGER, + unique: 'unique', + }, + }); + Model.findOne = sinon.stub(); + sinon.spy(Sequelize.Model, 'findOne'); + + await Model.findByPk(1); + Model.findOne.should.not.have.been.called; + Sequelize.Model.findOne.should.have.been.called; + }); + }); +}); diff --git a/test/unit/model/findone.test.js b/test/unit/model/find-one.test.js similarity index 87% rename from test/unit/model/findone.test.js rename to test/unit/model/find-one.test.js index 046f91c93882..2604e92bdc80 100644 --- a/test/unit/model/findone.test.js +++ b/test/unit/model/find-one.test.js @@ -107,5 +107,22 @@ describe(Support.getTestDialectTeaser('Model'), () => { await Model.findOne({ where: { unique1: 42 } }); expect(this.stub.getCall(0).args[0]).to.be.an('object').to.have.property('limit'); }); + it('should call internal findAll() method if findOne() is overridden', async () => { + const Model = current.define('model', { + unique1: { + type: DataTypes.INTEGER, + unique: 'unique', + }, + unique2: { + type: DataTypes.INTEGER, + unique: 'unique', + }, + }); + Model.findAll = sinon.stub(); + + await Model.findOne(); + Model.findAll.should.not.have.been.called; + Sequelize.Model.findAll.should.have.been.called; + }); }); }); diff --git a/test/unit/model/getAttributes.test.js b/test/unit/model/get-attributes.test.js similarity index 100% rename from test/unit/model/getAttributes.test.js rename to test/unit/model/get-attributes.test.js diff --git a/test/unit/model/removeAttribute.test.js b/test/unit/model/remove-attribute.test.js similarity index 100% rename from test/unit/model/removeAttribute.test.js rename to test/unit/model/remove-attribute.test.js