From 3b14cec0b8e10fafcd36345476f6d7515de14b61 Mon Sep 17 00:00:00 2001
From: Jack Reed <phillipjreed@gmail.com>
Date: Fri, 15 Feb 2019 16:52:31 -0700
Subject: [PATCH] Add back reducer UPDATE_VIEWPORT test and test window cleanup

---
 __tests__/src/reducers/viewers.test.js | 45 ++++++++++++++++++++++++++
 src/state/reducers/viewers.js          |  7 ++++
 2 files changed, 52 insertions(+)
 create mode 100644 __tests__/src/reducers/viewers.test.js

diff --git a/__tests__/src/reducers/viewers.test.js b/__tests__/src/reducers/viewers.test.js
new file mode 100644
index 000000000..9adc942f8
--- /dev/null
+++ b/__tests__/src/reducers/viewers.test.js
@@ -0,0 +1,45 @@
+import { viewersReducer } from '../../../src/state/reducers/viewers';
+import ActionTypes from '../../../src/state/actions/action-types';
+
+describe('viewers reducer', () => {
+  it('should handle UPDATE_VIEWPORT', () => {
+    expect(viewersReducer({
+      abc123: {
+        x: 1,
+      },
+      def456: {
+        y: 1,
+      },
+    }, {
+      type: ActionTypes.UPDATE_VIEWPORT,
+      windowId: 'abc123',
+      payload: { x: 0, y: 1, zoom: 0.5 },
+    })).toEqual({
+      abc123: {
+        x: 0,
+        y: 1,
+        zoom: 0.5,
+      },
+      def456: {
+        y: 1,
+      },
+    });
+  });
+  it('should handle REMOVE_WINDOW', () => {
+    expect(viewersReducer({
+      abc123: {
+        foo: 'bar',
+      },
+      def456: {
+        foo: 'bar',
+      },
+    }, {
+      type: ActionTypes.REMOVE_WINDOW,
+      windowId: 'abc123',
+    })).toEqual({
+      def456: {
+        foo: 'bar',
+      },
+    });
+  });
+});
diff --git a/src/state/reducers/viewers.js b/src/state/reducers/viewers.js
index dccd3dbdf..e31e42d03 100644
--- a/src/state/reducers/viewers.js
+++ b/src/state/reducers/viewers.js
@@ -12,6 +12,13 @@ export const viewersReducer = (state = {}, action) => {
           ...action.payload,
         },
       };
+    case ActionTypes.REMOVE_WINDOW:
+      return Object.keys(state).reduce((object, key) => {
+        if (key !== action.windowId) {
+          object[key] = state[key]; // eslint-disable-line no-param-reassign
+        }
+        return object;
+      }, {});
     default:
       return state;
   }
-- 
GitLab