From 34feac04113fa9b7263d167b0d89cc0c51a010aa Mon Sep 17 00:00:00 2001 From: Brown Date: Tue, 13 Feb 2024 16:42:01 +0900 Subject: [PATCH] introduce resumeTokenChanged into 6.x --- lib/cursor/ChangeStream.js | 2 +- test/model.test.js | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/cursor/ChangeStream.js b/lib/cursor/ChangeStream.js index 24c2f55665a..6cee9f8b371 100644 --- a/lib/cursor/ChangeStream.js +++ b/lib/cursor/ChangeStream.js @@ -75,7 +75,7 @@ class ChangeStream extends EventEmitter { this.closed = true; }); - ['close', 'change', 'end', 'error'].forEach(ev => { + ['close', 'change', 'end', 'error', 'resumeTokenChanged'].forEach(ev => { this.driverChangeStream.on(ev, data => { // Sometimes Node driver still polls after close, so // avoid any uncaught exceptions due to closed change streams diff --git a/test/model.test.js b/test/model.test.js index 700dfb87502..00573da4440 100644 --- a/test/model.test.js +++ b/test/model.test.js @@ -5406,6 +5406,20 @@ describe('Model', function() { assert.equal(changeData.operationType, 'insert'); assert.equal(changeData.fullDocument.name, 'Child'); }); + + it('bubbles up resumeTokenChanged events (gh-14349)', async function() { + const MyModel = db.model('Test', new Schema({ name: String })); + + const resumeTokenChangedEvent = new Promise(resolve => { + changeStream = MyModel.watch(); + listener = data => resolve(data); + changeStream.once('resumeTokenChanged', listener); + }); + + await MyModel.create({ name: 'test' }); + const { _data } = await resumeTokenChangedEvent; + assert.ok(_data); + }); }); describe('sessions (gh-6362)', function() {