From 77f2aad5d9c7cfe3774f8f0b5a657c91bda65044 Mon Sep 17 00:00:00 2001 From: ggurkal Date: Wed, 29 Apr 2020 23:23:46 +0200 Subject: [PATCH] fix(virtualtype): order of applyGetters and applySetters --- lib/virtualtype.js | 8 ++++---- test/docs/schemas.test.js | 14 ++++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/virtualtype.js b/lib/virtualtype.js index f91438ac22..1afc6a8e4d 100644 --- a/lib/virtualtype.js +++ b/lib/virtualtype.js @@ -138,8 +138,8 @@ VirtualType.prototype.set = function(fn) { VirtualType.prototype.applyGetters = function(value, doc) { let v = value; - for (let l = this.getters.length - 1; l >= 0; l--) { - v = this.getters[l].call(doc, v, this, doc); + for (const getter of this.getters) { + v = getter.call(doc, v, this, doc); } return v; }; @@ -155,8 +155,8 @@ VirtualType.prototype.applyGetters = function(value, doc) { VirtualType.prototype.applySetters = function(value, doc) { let v = value; - for (let l = this.setters.length - 1; l >= 0; l--) { - v = this.setters[l].call(doc, v, this, doc); + for (const setter of this.setters) { + v = setter.call(doc, v, this, doc); } return v; }; diff --git a/test/docs/schemas.test.js b/test/docs/schemas.test.js index 152c176c3b..117f9eed9e 100644 --- a/test/docs/schemas.test.js +++ b/test/docs/schemas.test.js @@ -25,10 +25,16 @@ describe('Advanced Schemas', function () { it('Creating from ES6 Classes Using `loadClass()`', function(done) { const schema = new Schema({ firstName: String, lastName: String }); - class PersonClass { + class HumanClass { + get fullName() { + return 'My name'; + } + } + + class PersonClass extends HumanClass { // `fullName` becomes a virtual get fullName() { - return `${this.firstName} ${this.lastName}`; + return `${super.fullName} is ${this.firstName} ${this.lastName}`; } set fullName(v) { @@ -56,14 +62,14 @@ describe('Advanced Schemas', function () { Person.create({ firstName: 'Jon', lastName: 'Snow' }). then(doc => { - assert.equal(doc.fullName, 'Jon Snow'); + assert.equal(doc.fullName, 'My name is Jon Snow'); doc.fullName = 'Jon Stark'; assert.equal(doc.firstName, 'Jon'); assert.equal(doc.lastName, 'Stark'); return Person.findByFullName('Jon Snow'); }). then(doc => { - assert.equal(doc.fullName, 'Jon Snow'); + assert.equal(doc.fullName, 'My name is Jon Snow'); // acquit:ignore:start done(); // acquit:ignore:end