From d750af0c482ca8cc80617f3b14005ddf7ba6f8fd Mon Sep 17 00:00:00 2001
From: kay delaney <45561153+kaydelaney@users.noreply.github.com>
Date: Fri, 21 Jun 2024 11:18:52 +0100
Subject: [PATCH] Scenes: Unset _changesWorker when change tracker is
terminated (#89495)
* Scenes: Unset _changesWorker when change tracker is terminated
Closes #89458
---
.betterer.results | 4 ++++
.../DashboardSceneChangeTracker.test.ts | 23 +++++++++++++++++++
.../saving/DashboardSceneChangeTracker.ts | 1 +
3 files changed, 28 insertions(+)
create mode 100644 public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.test.ts
diff --git a/.betterer.results b/.betterer.results
index dd98080fa88..ec2f803ce93 100644
--- a/.betterer.results
+++ b/.betterer.results
@@ -2838,6 +2838,10 @@ exports[`better eslint`] = {
[0, 0, 0, "No untranslated strings. Wrap text with ", "2"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "3"]
],
+ "public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.test.ts:5381": [
+ [0, 0, 0, "Unexpected any. Specify a different type.", "0"],
+ [0, 0, 0, "Unexpected any. Specify a different type.", "1"]
+ ],
"public/app/features/dashboard-scene/saving/SaveDashboardAsForm.tsx:5381": [
[0, 0, 0, "No untranslated strings. Wrap text with ", "0"],
[0, 0, 0, "No untranslated strings. Wrap text with ", "1"],
diff --git a/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.test.ts b/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.test.ts
new file mode 100644
index 00000000000..413035cf22b
--- /dev/null
+++ b/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.test.ts
@@ -0,0 +1,23 @@
+import * as createDetectChangesWorker from 'app/features/dashboard-scene/saving/createDetectChangesWorker';
+
+import { DashboardSceneChangeTracker } from './DashboardSceneChangeTracker';
+
+describe('DashboardSceneChangeTracker', () => {
+ it('should set _changesWorker to undefined when terminate is called', () => {
+ const terminate = jest.fn();
+ jest.spyOn(createDetectChangesWorker, 'createWorker').mockImplementation(
+ () =>
+ ({
+ terminate,
+ }) as any
+ );
+ const changeTracker = new DashboardSceneChangeTracker({
+ subscribeToEvent: jest.fn().mockReturnValue({ unsubscribe: jest.fn() }),
+ } as any);
+ changeTracker.startTrackingChanges();
+
+ expect(changeTracker['_changesWorker']).not.toBeUndefined();
+ changeTracker.terminate();
+ expect(changeTracker['_changesWorker']).toBeUndefined();
+ });
+});
diff --git a/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts b/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts
index 4bc186849e9..bf30ddd9e99 100644
--- a/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts
+++ b/public/app/features/dashboard-scene/saving/DashboardSceneChangeTracker.ts
@@ -188,5 +188,6 @@ export class DashboardSceneChangeTracker {
public terminate() {
this.stopTrackingChanges();
this._changesWorker?.terminate();
+ this._changesWorker = undefined;
}
}