From 37f98f6099f395081d936f5d6a1b448a9144efc7 Mon Sep 17 00:00:00 2001
From: chrisgarrity <chrisg@media.mit.edu>
Date: Mon, 14 May 2018 17:17:39 -0400
Subject: [PATCH] Fix up comments

- better split of hash-parser/project-loader unit tests.
---
 src/lib/hash-parser-hoc.jsx                   | 19 ++++---
 .../util/hash-project-loader-hoc.test.jsx     | 54 +++++--------------
 test/unit/util/project-loader-hoc.test.jsx    | 11 ++++
 3 files changed, 32 insertions(+), 52 deletions(-)

diff --git a/src/lib/hash-parser-hoc.jsx b/src/lib/hash-parser-hoc.jsx
index cf3953824..04250aa6e 100644
--- a/src/lib/hash-parser-hoc.jsx
+++ b/src/lib/hash-parser-hoc.jsx
@@ -1,4 +1,5 @@
 import React from 'react';
+import bindAll from 'lodash.bindall';
 
 /* Higher Order Component to get the project id from location.hash
  * @param {React.Component} WrappedComponent component to receive projectData prop
@@ -8,24 +9,22 @@ const HashParserHOC = function (WrappedComponent) {
     class HashParserComponent extends React.Component {
         constructor (props) {
             super(props);
-            this.fetchProjectId = this.fetchProjectId.bind(this);
-            this.updateProject = this.updateProject.bind(this);
+            bindAll(this, [
+                'handleHashChange'
+            ]);
             this.state = {
                 projectId: null
             };
         }
         componentDidMount () {
-            window.addEventListener('hashchange', this.updateProject);
-            this.updateProject();
+            window.addEventListener('hashchange', this.handleHashChange);
+            this.handleHashChange();
         }
         componentWillUnmount () {
-            window.removeEventListener('hashchange', this.updateProject);
+            window.removeEventListener('hashchange', this.handleHashChange);
         }
-        fetchProjectId () {
-            return window.location.hash.substring(1);
-        }
-        updateProject () {
-            let projectId = this.fetchProjectId();
+        handleHashChange () {
+            let projectId = window.location.hash.substring(1);
             if (projectId !== this.state.projectId) {
                 if (projectId.length < 1) projectId = 0;
                 this.setState({projectId: projectId});
diff --git a/test/unit/util/hash-project-loader-hoc.test.jsx b/test/unit/util/hash-project-loader-hoc.test.jsx
index 9ab9af432..5cf78747a 100644
--- a/test/unit/util/hash-project-loader-hoc.test.jsx
+++ b/test/unit/util/hash-project-loader-hoc.test.jsx
@@ -1,64 +1,34 @@
 import React from 'react';
-import ProjectLoaderHOC from '../../../src/lib/project-loader-hoc.jsx';
 import HashParserHOC from '../../../src/lib/hash-parser-hoc.jsx';
-import storage from '../../../src/lib/storage';
 import {mount} from 'enzyme';
 
 jest.mock('react-ga');
 
-describe('Hash/ProjectLoaderHOC', () => {
-    test('when there is no project data, it renders null', () => {
-        const Component = ({projectData}) => <div>{projectData}</div>;
-        const WrappedComponent = HashParserHOC(ProjectLoaderHOC(Component));
+describe('HashParserHOC', () => {
+    test('when there is a hash, it passes the hash as projectId', () => {
+        const Component = ({projectId}) => <div>{projectId}</div>;
+        const WrappedComponent = HashParserHOC(Component);
         window.location.hash = '#winning';
-        const originalLoad = storage.load;
-        storage.load = jest.fn(() => Promise.resolve(null));
         const mounted = mount(<WrappedComponent />);
-        storage.load = originalLoad;
-        window.location.hash = '';
-        const mountedDiv = mounted.find('div');
-        expect(mountedDiv.exists()).toEqual(false);
+        expect(mounted.state().projectId).toEqual('winning');
     });
 
-    test('when there is no hash, it loads the default project', () => {
-        const Component = ({projectData}) => <div>{projectData}</div>;
-        const WrappedComponent = HashParserHOC(ProjectLoaderHOC(Component));
+    test('when there is no hash, it passes 0 as the projectId', () => {
+        const Component = ({projectId}) => <div>{projectId}</div>;
+        const WrappedComponent = HashParserHOC(Component);
         window.location.hash = '';
-        const originalLoad = storage.load;
-        storage.load = jest.fn((type, id) => Promise.resolve(id));
         const mounted = mount(<WrappedComponent />);
         expect(mounted.state().projectId).toEqual(0);
-        expect(storage.load).toHaveBeenCalledWith(
-            storage.AssetType.Project, 0, storage.DataFormat.JSON
-        );
-        storage.load = originalLoad;
-    });
-
-    test('when there is a hash, it tries to load that project', () => {
-        const Component = ({projectData}) => <div>{projectData}</div>;
-        const WrappedComponent = HashParserHOC(ProjectLoaderHOC(Component));
-        window.location.hash = '#winning';
-        const originalLoad = storage.load;
-        storage.load = jest.fn((type, id) => Promise.resolve({data: id}));
-        const mounted = mount(<WrappedComponent />);
-        expect(mounted.state().projectId).toEqual('winning');
-        expect(storage.load).toHaveBeenLastCalledWith(
-            storage.AssetType.Project, 'winning', storage.DataFormat.JSON
-        );
-        storage.load = originalLoad;
     });
 
-    test('when hash change happens, the project data state is changed', () => {
-        const Component = ({projectData}) => <div>{projectData}</div>;
-        const WrappedComponent = HashParserHOC(ProjectLoaderHOC(Component));
+    test('when hash change happens, the projectId state is changed', () => {
+        const Component = ({projectId}) => <div>{projectId}</div>;
+        const WrappedComponent = HashParserHOC(Component);
         window.location.hash = '';
         const mounted = mount(<WrappedComponent />);
         expect(mounted.state().projectId).toEqual(0);
-        const originalLoad = storage.load;
-        storage.load = jest.fn((type, id) => Promise.resolve({data: id}));
         window.location.hash = '#winning';
-        mounted.instance().updateProject();
+        mounted.instance().handleHashChange();
         expect(mounted.state().projectId).toEqual('winning');
-        storage.load = originalLoad;
     });
 });
diff --git a/test/unit/util/project-loader-hoc.test.jsx b/test/unit/util/project-loader-hoc.test.jsx
index 30278892f..502ac0f62 100644
--- a/test/unit/util/project-loader-hoc.test.jsx
+++ b/test/unit/util/project-loader-hoc.test.jsx
@@ -33,4 +33,15 @@ describe('ProjectLoaderHOC', () => {
         storage.load = originalLoad;
     });
 
+    test('when there is no project data, it renders null', () => {
+        const Component = ({projectData}) => <div>{projectData}</div>;
+        const WrappedComponent = ProjectLoaderHOC(Component);
+        const originalLoad = storage.load;
+        storage.load = jest.fn(() => Promise.resolve(null));
+        const mounted = mount(<WrappedComponent />);
+        storage.load = originalLoad;
+        const mountedDiv = mounted.find('div');
+        expect(mountedDiv.exists()).toEqual(false);
+    });
+
 });
-- 
GitLab