{"action":"created","comment":{"url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/comments/48872934","id":48872934,"diff_hunk":"@@ -404,275 +618,686 @@ describe('IdeasViewCtrl', function() {\n         });\n     });\n \n-    describe('deleting a comment', function() {\n-        var commentIndex = 0;\n-        var originalLength = 0;\n+    describe('ctrl.deleteIdea() negative test', function() {\n+        var mockIdea;\n \n         beforeEach(function() {\n-            ctrl.newComment = 'This is a test comment!';\n-            scope.addNewInteraction('comments');\n-            spyOn(ideaSvcMock, 'deleteComment').and.callThrough();\n-            commentIndex = scope.idea.comments.length - 1;\n-            originalLength = scope.idea.comments.length;\n+            loginSvcMock.checkLogin(authorAccount);\n+            ideaSvcMock.getIdea(null, function(idea) {\n+                mockIdea = idea;\n+            });\n         });\n \n-        it('should allow the author to delete it', function() {\n+        it('should show a console log if error', function() {\n+            spyOn(ideaSvcMock, 'deleteIdea').and.callFake(function deleteIdea(ideaId, successCb, errorCb) {\n+                errorCb('NOPE');\n+            });\n+            spyOn(console, 'log').and.callThrough();\n+\n+            ctrl.deleteIdea();\n+            expect(ideaSvcMock.deleteIdea).toHaveBeenCalled();\n+            expect(console.log).toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('ctrl.confirmDeleteIdea', function() {\n+        var mockIdea;\n+\n+        beforeEach(function() {\n             loginSvcMock.checkLogin(authorAccount);\n-            expect(loginSvcMock.isUserLoggedIn()).toBe(true);\n-            scope.removeInteraction(\"comments\", scope.idea.comments[commentIndex]);\n-            expect(ideaSvcMock.deleteComment).toHaveBeenCalled();\n-            expect(scope.idea.comments.length).toBe(originalLength - 1);\n+            ideaSvcMock.getIdea(null, function(idea) {\n+                mockIdea = idea;\n+            });\n+            spyOn($mdDialog, 'show').and.callThrough();\n+            spyOn($mdDialog, 'confirm').and.callThrough();\n+            spyOn(ideaSvcMock, 'deleteIdea').and.callThrough();\n         });\n \n-        it('should not allow someone other than the author to delete the idea', function() {\n+        it('expect to show dialog window when deleting idea', function() {\n+            ctrl.confirmDeleteIdea();\n+\n+            expect($mdDialog.show).toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('ctrl.isUserAuthor', function() {\n+        var mockIdea, isAuthor;\n+\n+        beforeEach(function() {\n+            loginSvcMock.checkLogin(authorAccount);\n+            ideaSvcMock.getIdea(null, function(idea) {\n+                mockIdea = idea;\n+            });\n+        });\n+\n+        it('should expect to return true if author of idea', function() {\n+            isAuthor = ctrl.isUserAuthor();\n+\n+            expect(isAuthor).toBe(true);\n+        });\n+\n+        it('should expect to return false if not author of idea', function() {\n             loginSvcMock.checkLogin(nonAuthorAccount);\n-            scope.removeInteraction(\"comments\", scope.idea.comments[commentIndex]);\n-            expect(ideaSvcMock.deleteComment).not.toHaveBeenCalled();\n-            expect(scope.idea.comments.length).toBe(originalLength);\n-            expect(scope.idea.comments[commentIndex].deleted).not.toBe(true);\n+            isAuthor = ctrl.isUserAuthor();\n+\n+            expect(isAuthor).toBe(false);\n         });\n     });\n \n-    describe('deleting an update', function() {\n-        var updateIndex = 0;\n-        var originalLength = 0;\n-        var mockIdea;\n+    describe('$scope.focusTeam', function() {\n+        it('should expect to focus on tab 3', function() {\n+            scope.focusTeam();\n+\n+            expect(scope.selectedTab).toBe(3);\n+        });\n+    });\n+\n+    describe('ctrl.updateTeam', function() {\n+        var mockIdea, numTeam;\n \n         beforeEach(function() {\n-            ctrl.newUpdate = 'This is a test update!';\n-            scope.addNewInteraction('updates');\n-            spyOn(ideaSvcMock, 'removeInteraction').and.callThrough();\n+            loginSvcMock.checkLogin(authorAccount);\n             ideaSvcMock.getIdea(null, function(idea) {\n                 mockIdea = idea;\n             });\n-            updateIndex = scope.idea.updates.length - 1;\n-            originalLength = scope.idea.updates.length;\n+            spyOn(toastSvc, 'show').and.callThrough();\n+            numTeam = mockIdea.team.length;\n         });\n \n-        it('should allow the author to delete it', function() {\n+        it('should expect to update the team in the idea', function() {\n+            spyOn(ideaSvcMock, 'updateIdea').and.callThrough();\n+\n+            // Add one to team\n+            mockIdea.backs[1].isInTeam = true;\n+            ctrl.updateTeam();\n+\n+            expect(mockIdea.team.length).toBe(numTeam + 1);\n+            expect(mockIdea.team[numTeam].memberId).toBe(4);\n+            expect(ideaSvcMock.updateIdea).toHaveBeenCalled();\n+            expect(toastSvc.show).toHaveBeenCalled();\n+        });\n+\n+        it('should expect an error to trigger a console log', function() {\n+            spyOn(ideaSvcMock, 'updateIdea').and.callFake(function updateIdea(ideaId, property, data, successCb, errorCb) {\n+                errorCb('NOPE');\n+            });\n+            spyOn(console, 'log').and.callThrough();\n+\n+            ctrl.updateTeam();\n+            expect(ideaSvcMock.updateIdea).toHaveBeenCalled();\n+            expect(console.log).toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('ctrl.editTeam', function() {\n+\n+        beforeEach(function() {\n             loginSvcMock.checkLogin(authorAccount);\n-            scope.removeInteraction('updates', scope.idea.updates[updateIndex]);\n-            expect(ideaSvcMock.removeInteraction).toHaveBeenCalled();\n-            expect(scope.idea.updates.length).toBe(updateIndex);\n+            spyOn($mdDialog, 'show').and.callThrough();\n         });\n \n-        it('should not allow someone other than the author to delete the idea', function() {\n-            loginSvcMock.checkLogin(nonAuthorAccount);\n-            scope.removeInteraction('updates', scope.idea.updates[updateIndex]);\n-            expect(ideaSvcMock.removeInteraction).not.toHaveBeenCalled();\n-            expect(scope.idea.updates.length).toBe(originalLength);\n+        it('should expect to show dialog to edit', function() {\n+            ctrl.editTeam();\n+            expect($mdDialog.show).toHaveBeenCalled();\n         });\n     });\n \n-    describe('editing a back', function() {\n-        var backIndex = 0;\n+    describe('ctrl.removeSelfFromTeam', function() {\n+        var numTeam, numBacks;\n \n         beforeEach(function() {\n+            loginSvcMock.checkLogin(authorAccount);\n+            numTeam = scope.idea.team.length;\n+            numBacks = scope.idea.backs.length;\n+            spyOn($mdDialog, 'show').and.callThrough();\n+        });\n+\n+        it('expect to show dialog to remove from Team', function() {\n+            // Add back\n             ctrl.newBack = 'This is a test back!';\n+            scope.selectedTypes = [{ name: 'Experience' }, { name: 'Funding' }];\n             scope.addNewInteraction('backs');\n-            spyOn(ideaSvcMock, 'editBack').and.callThrough();\n-            backIndex = scope.idea.backs.length - 1;\n+            expect(scope.idea.backs.length).toBe(numBacks + 1);\n+\n+            // Add to team\n+            scope.idea.backs[scope.idea.backs.length - 1].isInTeam = true;\n+            ctrl.updateTeam();\n+            expect(scope.idea.team.length).toBe(numTeam + 1);\n+\n+            // Test remove from team\n+            ctrl.removeSelfFromTeam();\n+            expect($mdDialog.show).toHaveBeenCalled();\n+            ctrl.removeUserFromTeam(scope.userBack);\n+            scope.removeInteraction('backs', scope.userBack);\n+            expect(scope.idea.team.length).toBe(numTeam);\n+            expect(scope.idea.backs.length).toBe(numBacks);\n         });\n \n-        it('should allow the author to edit it', function() {\n+        it('expect dialog not to be called if not on Team', function() {\n+            // Add back\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+            ctrl.newBack = 'This is a test back!';\n+            scope.selectedTypes = [{ name: 'Experience' }, { name: 'Funding' }];\n+            scope.addNewInteraction('backs');\n+\n+            // Test remove from team without backing\n+            ctrl.removeSelfFromTeam();\n+            expect($mdDialog.show).not.toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('ctrl.isUserMemberOfTeam', function() {\n+        var isMember;\n+\n+        it('show return true if member of team', function() {\n             loginSvcMock.checkLogin(authorAccount);\n-            expect(loginSvcMock.isUserLoggedIn()).toBe(true);\n-            ctrl.editBackText = \"This back was edited!\";\n-            ctrl.editBack(scope.idea.backs[backIndex]);\n-            expect(ideaSvcMock.editBack).toHaveBeenCalled();\n-            expect(scope.idea.backs[backIndex].text).toBe(\"This back was edited!\");\n+            isMember = ctrl.isUserMemberOfTeam();\n+\n+            expect(isMember).toBe(true);\n         });\n \n-        it('should not allow someone other than the author to edit the back', function() {\n+        it('show return false if not member of team', function() {\n             loginSvcMock.checkLogin(nonAuthorAccount);\n-            ctrl.editBack(scope.idea.backs[backIndex]);\n-            expect(ideaSvcMock.editBack).not.toHaveBeenCalled();\n+            isMember = ctrl.isUserMemberOfTeam();\n+\n+            expect(isMember).toBe(false);\n         });\n+\n     });\n \n-    describe('deleting a back', function() {\n-        var backIndex = 0;\n+    describe('ctrl.isUserExactMemberOfTeam', function() {\n+        var isExactMember;\n+\n+        it('should return true if exact member of team', function() {\n+            loginSvcMock.checkLogin(authorAccount);\n+            isExactMember = ctrl.isUserExactMemberOfTeam(0);\n+\n+            expect(isExactMember).toBe(true);\n+        });\n+\n+        it('should return false if not exact member of team', function() {\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+            isExactMember = ctrl.isUserExactMemberOfTeam(0);\n+\n+            expect(isExactMember).toBe(false);\n+        });\n+    });\n+\n+    describe('ctrl.removeUserFromTeam', function() {\n+        var numTeam, testBack;\n+\n+        beforeEach(function() {\n+            numTeam = scope.idea.team.length;\n+        });\n+\n+        it('should remove user from team if in team', function() {\n+            //Login as owner\n+            loginSvcMock.switchLogin(1);\n+            loginSvcMock.checkLogin(authorAccount);\n+            expect(loginSvcMock.getProperty('_id')).toBe(1);\n+            expect(ctrl.isUserMemberOfTeam()).toBe(true);\n+\n+            //Get back\n+            scope.loadEditBack();\n+            expect(scope.userBack).not.toBe('');\n+\n+            //Test function\n+            ctrl.removeUserFromTeam(scope.userBack);\n+            expect(scope.userBack.isInTeam).toBe(false);\n+            expect(scope.idea.team.length).toBe(numTeam - 1);\n+        });\n+\n+        it('should not remove user from team if user has not backed', function() {\n+            //Login as non-owner\n+            loginSvcMock.switchLogin(2);\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+            expect(loginSvcMock.getProperty('_id')).toBe(2);\n+\n+            //Get back\n+            scope.loadEditBack();\n+            expect(scope.userBack).toBe('');\n+\n+            //Test function\n+            ctrl.removeUserFromTeam(scope.userBack);\n+            expect(scope.idea.team.length).toBe(numTeam);\n+        });\n+\n+        it('should not remove user from team if user has backed but not in team', function() {\n+            //Login as non-owner\n+            loginSvcMock.switchLogin(2);\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+\n+            //Test back\n+            testBack = {\n+                text: '',\n+                authorId: 1,\n+                timeCreated: new Date().toISOString(),\n+                timeModified: new Date().toISOString(),\n+                types: [{ name: 'Time' }]\n+            };\n+\n+            //Test function\n+            ctrl.removeUserFromTeam(testBack);\n+            expect(scope.idea.team.length).toBe(numTeam);\n+        });\n+    });\n+\n+    describe('ctrl.isUserAuthorOfInteraction', function() {\n+        var authorOfInt, testBack;\n+\n+        beforeEach(function() {\n+            //setup test back as author\n+            testBack = {\n+                text: '',\n+                authorId: 1,\n+                timeCreated: new Date().toISOString(),\n+                timeModified: new Date().toISOString(),\n+                types: [{ name: 'Time' }]\n+            };\n+        });\n+\n+        it('should return true if author of back', function() {\n+            //login as author\n+            loginSvcMock.switchLogin(1);\n+            expect(loginSvcMock.getProperty('_id')).toBe(1);\n+            loginSvcMock.checkLogin(authorAccount);\n+\n+            //test function as author\n+            authorOfInt = ctrl.isUserAuthorOfInteraction(testBack);\n+            expect(authorOfInt).toBe(true);\n+        });\n+\n+        it('should return false if not author of back', function() {\n+            //login as not author\n+            loginSvcMock.switchLogin(2);\n+            expect(loginSvcMock.getProperty('_id')).toBe(2);\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+\n+            //test function as non-author\n+            authorOfInt = ctrl.isUserAuthorOfInteraction(testBack);\n+            expect(authorOfInt).toBe(false);\n+        });\n+    });\n+\n+    describe('$scope.focusBack', function() {\n+        it('should focus on the back tab', function() {\n+            scope.focusBack();\n+            expect(scope.selectedTab).toBe(2);\n+        });\n+    });\n+\n+    describe('ctrl.showAddBack', function() {\n         var mockIdea;\n \n         beforeEach(function() {\n-            ctrl.newBack = 'This is a test back!';\n-            scope.addNewInteraction('backs');\n-            spyOn(ideaSvcMock, 'removeInteraction').and.callThrough();\n             spyOn($mdDialog, 'show').and.callThrough();\n             ideaSvcMock.getIdea(null, function(idea) {\n                 mockIdea = idea;\n             });\n-            backIndex = scope.idea.backs.length - 1;\n+            scope.idea = mockIdea;\n         });\n \n-        it('should allow the author to delete the back', function() {\n+        it('should call $mdShow if logged in', function() {\n             loginSvcMock.checkLogin(authorAccount);\n-            scope.removeInteraction('backs', scope.idea.backs[backIndex]);\n-            expect(ideaSvcMock.removeInteraction).toHaveBeenCalled();\n-            expect(scope.idea.backs.length).toBe(backIndex);\n+            ctrl.showAddBack();\n+\n+            expect($mdDialog.show).toHaveBeenCalled();\n         });\n \n-        it('should not allow someone other than the author to delete the back', function() {\n-            loginSvcMock.checkLogin(nonAuthorAccount);\n-            scope.removeInteraction('backs', scope.idea.updates[backIndex]);\n-            expect(ideaSvcMock.removeInteraction).not.toHaveBeenCalled();\n-            expect(scope.idea.backs.length).toBe(backIndex + 1);\n+        it('should not call $mdShow if not logged in', function() {\n+            loginSvcMock.logout();\n+\n+            ctrl.showAddBack();\n+            expect($mdDialog.show).not.toHaveBeenCalled();\n         });\n \n-        it('show ask for confirmation', function() {\n+        it('should call edit back if user has backed', function() {\n+            //Login as user\n+            loginSvcMock.switchLogin(1);\n             loginSvcMock.checkLogin(authorAccount);\n-            scope.removeBack();\n+            ctrl.showAddBack();\n+\n+            //Expect to show edit back template\n+            expect($mdDialog.show).toHaveBeenCalled();\n+            expect(scope.hasUserBacked()).toBe(true);\n+        });\n+\n+        it('should call add back if user has not backed', function() {\n+            //Login as non-user\n+            loginSvcMock.switchLogin(2);\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+            ctrl.showAddBack();\n+\n+            //Expect to show add back template\n             expect($mdDialog.show).toHaveBeenCalled();\n+            expect(scope.hasUserBacked()).not.toBe(true);\n         });\n     });\n \n-    describe('forming a team', function() {\n-        var teamLength = 0;\n-        var mockIdea;\n+    describe('ctrl.editBack', function() {\n+        var testBack, time;\n \n         beforeEach(function() {\n+            //Login as author\n+            loginSvcMock.switchLogin(1);\n             loginSvcMock.checkLogin(authorAccount);\n-            ideaSvcMock.getIdea(null, function(idea) {\n-                mockIdea = idea;\n+\n+            spyOn(ideaSvcMock, 'editBack').and.callThrough();\n+\n+            time = '2015-11-29T22:28:48.475Z';\n+            testBack = {\n+                text: '',\n+                authorId: 1,\n+                timeCreated: '2015-10-29T22:28:48.475Z',\n+                timeModified: time,\n+                types: [{ name: 'Time' }]\n+            };\n+        });\n+\n+        it('should edit the back if user is the author', function() {\n+            ctrl.editBack(testBack);\n+            expect(ideaSvcMock.editBack).toHaveBeenCalled();\n+\n+            scope.loadEditBack();\n+            expect(scope.userBack.timeModified).not.toBe(time);\n+        });\n+\n+        it('should not edit the back if the dialog was canceled', function() {\n+            scope.status = 'You canceled the dialog.';\n+            ctrl.editBack(testBack);\n+            expect(ideaSvcMock.editBack).toHaveBeenCalled();\n+\n+            scope.loadEditBack();\n+            expect(scope.userBack.timeModified).toBe(time);\n+        });\n+\n+        it('should not edit the back if user is not the author', function() {\n+            //Login as not author\n+            loginSvcMock.switchLogin(2);\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n+\n+            ctrl.editBack(testBack);\n+            expect(ideaSvcMock.editBack).not.toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('ctrl.editBack negative', function() {\n+        var testBack;\n+\n+        beforeEach(function() {\n+            loginSvcMock.switchLogin(1);\n+            loginSvcMock.checkLogin(authorAccount);\n+\n+            testBack = {\n+                text: '',\n+                authorId: 1,\n+                timeCreated: '2015-11-29T22:28:48.475Z',\n+                timeModified: '2015-11-29T22:28:48.475Z',\n+                types: [{ name: 'Time' }]\n+            };\n+\n+            spyOn(ideaSvcMock, 'editBack').and.callFake(function editBack(ideaId, backAuthorId, newBack, successCb, errorCb) {\n+                errorCb('NOPE');\n             });\n-            // Zero out the array\n-            scope.idea.team = [];\n+            spyOn(console, 'log').and.callThrough();\n+        });\n+\n+        it('should through a console log if errored', function() {\n+            ctrl.editBack(testBack);\n+\n+            expect(ideaSvcMock.editBack).toHaveBeenCalled();\n+            expect(console.log).toHaveBeenCalled();\n+        });\n+    });\n+\n+    describe('ctrl.removeBack', function() {\n+        var testBack, backLength, teamLength;\n+\n+        beforeEach(function() {\n+            //Login as author\n+            loginSvcMock.switchLogin(1);\n+            loginSvcMock.checkLogin(authorAccount);\n+\n+            backLength = scope.idea.backs.length;\n             teamLength = scope.idea.team.length;\n-            spyOn(ideaSvcMock, 'removeInteraction').and.callThrough();\n+\n+            testBack = {\n+                text: '',\n+                authorId: 1,\n+                timeCreated: '2015-10-29T22:28:48.475Z',\n+                timeModified: '2015-11-29T22:28:48.475Z',\n+                types: [{ name: 'Time' }]\n+            };\n+\n             spyOn($mdDialog, 'show').and.callThrough();\n-            spyOn(loginSvcMock, 'checkLogin').and.callThrough();\n         });\n \n-        it('Should not display a team when no team exists', function() {\n-            expect(scope.idea.team.length).toBe(0);\n+        it('should remove back if author and from team if member of team', function() {\n+\n+            //Dialog is opened\n+            scope.removeBack();\n+            expect($mdDialog.show).toHaveBeenCalled();\n+\n+            //execute confirm code\n+            scope.removeInteraction('backs', scope.userBack);\n+            if (ctrl.isUserMemberOfTeam()) {\n+                ctrl.removeUserFromTeam(scope.userBack);\n+            }\n+\n+            //expect back and team to be removed\n+            expect(scope.idea.backs.length).toBe(backLength - 1);\n+            expect(scope.idea.team.length).toBe(teamLength - 1);\n         });\n \n-        it('Should allow additions and deletions of team members', function() {\n-            // Add backer, check team length is 0\n-            ctrl.newBack = 'Rick backs this idea!';\n-            scope.addNewInteraction('backs');\n-            scope.idea.backs[teamLength].authorId = 1;\n+        it('should not remove back if not author', function() {\n+            //Login as non-user\n+            loginSvcMock.switchLogin(2);\n+            loginSvcMock.checkLogin(nonAuthorAccount);\n \n-            expect(scope.idea.team.length).toBe(teamLength);\n-            // Add backer to team, check team length is 1\n-            // & Check backer's name matches the team member name\n-            scope.idea.backs[teamLength].isInTeam = true;\n-            ctrl.updateTeam();\n+            scope.removeBack();\n+            expect($mdDialog.show).not.toHaveBeenCalled();\n+        });\n+    });\n \n-            expect(scope.idea.team.length).toBe(teamLength + 1);\n-            expect(scope.idea.team[teamLength].memberId).toBe(1);\n-            // Remove backer from team, check team length is 0\n-            scope.idea.backs[teamLength].isInTeam = false;\n-            ctrl.updateTeam();\n+    describe('ctrl.hasUserBacked', function() {\n+        var hasBacked;\n+\n+        it('should return true if user has backed', function() {\n+            loginSvcMock.checkLogin(authorAccount);\n+            hasBacked = scope.hasUserBacked();\n \n-            expect(scope.idea.team.length).toBe(0);\n+            expect(hasBacked).toBe(true);\n         });\n \n-        it('Should correctly update the switches', function() {","path":"src/ideas/ideasView/ideasView.spec.js","position":874,"original_position":874,"commit_id":"792b7108a06047b01bd420c95cf07f0ade1a08e3","original_commit_id":"792b7108a06047b01bd420c95cf07f0ade1a08e3","user":{"login":"monotkate","id":11742296,"avatar_url":"https://avatars.githubusercontent.com/u/11742296?v=3","gravatar_id":"","url":"https://api.github.com/users/monotkate","html_url":"https://github.com/monotkate","followers_url":"https://api.github.com/users/monotkate/followers","following_url":"https://api.github.com/users/monotkate/following{/other_user}","gists_url":"https://api.github.com/users/monotkate/gists{/gist_id}","starred_url":"https://api.github.com/users/monotkate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monotkate/subscriptions","organizations_url":"https://api.github.com/users/monotkate/orgs","repos_url":"https://api.github.com/users/monotkate/repos","events_url":"https://api.github.com/users/monotkate/events{/privacy}","received_events_url":"https://api.github.com/users/monotkate/received_events","type":"User","site_admin":false},"body":"Hum.  I'm not sure about that.  I was trying to figure out if I could pull the function at first because I wasn't sure we were still using it with the dialog, but I think I realized we still were.  ","created_at":"2016-01-05T17:47:54Z","updated_at":"2016-01-05T17:47:54Z","html_url":"https://github.com/YashdalfTheGray/flintandsteel/pull/226#discussion_r48872934","pull_request_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226","_links":{"self":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/comments/48872934"},"html":{"href":"https://github.com/YashdalfTheGray/flintandsteel/pull/226#discussion_r48872934"},"pull_request":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226"}}},"pull_request":{"url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226","id":55110404,"html_url":"https://github.com/YashdalfTheGray/flintandsteel/pull/226","diff_url":"https://github.com/YashdalfTheGray/flintandsteel/pull/226.diff","patch_url":"https://github.com/YashdalfTheGray/flintandsteel/pull/226.patch","issue_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues/226","number":226,"state":"open","locked":false,"title":"Test Hardening","user":{"login":"monotkate","id":11742296,"avatar_url":"https://avatars.githubusercontent.com/u/11742296?v=3","gravatar_id":"","url":"https://api.github.com/users/monotkate","html_url":"https://github.com/monotkate","followers_url":"https://api.github.com/users/monotkate/followers","following_url":"https://api.github.com/users/monotkate/following{/other_user}","gists_url":"https://api.github.com/users/monotkate/gists{/gist_id}","starred_url":"https://api.github.com/users/monotkate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monotkate/subscriptions","organizations_url":"https://api.github.com/users/monotkate/orgs","repos_url":"https://api.github.com/users/monotkate/repos","events_url":"https://api.github.com/users/monotkate/events{/privacy}","received_events_url":"https://api.github.com/users/monotkate/received_events","type":"User","site_admin":false},"body":"Alright, I've increased IdeasView and Navigation into the green.  DialogBackCtrl hasn't been tested it at all yet, but with some big PRs out there, I was hoping I could get some of this testing out there to make sure it didn't break them all moving forward.  \r\n\r\nIt will fail the build: jshint is balking because it's saying 'angular' is not defined for the new DialogBackCtrl file.  I'm not entirely sure to get around that since it works perfectly fine from what I can tell in the actual code.  Ideas?\r\n\r\nIt won't be perfect, but please take a look at what I've got and make comments.  I'm still struggling with testing dialogs, but I'm working on it.\r\n\r\n![image](https://cloud.githubusercontent.com/assets/11742296/12120347/862bb32a-b39e-11e5-80b4-2a7b43b572bb.png)\r\n\r\nOh, I should tag people: @YashdalfTheGray @Mctalian @alanlgirard \r\n","created_at":"2016-01-05T16:21:56Z","updated_at":"2016-01-05T17:47:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5be21d294d5c63cd0efae22f6818ffb54dbb068e","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226/commits","review_comments_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226/comments","review_comment_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/comments{/number}","comments_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues/226/comments","statuses_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/statuses/792b7108a06047b01bd420c95cf07f0ade1a08e3","head":{"label":"monotkate:master","ref":"master","sha":"792b7108a06047b01bd420c95cf07f0ade1a08e3","user":{"login":"monotkate","id":11742296,"avatar_url":"https://avatars.githubusercontent.com/u/11742296?v=3","gravatar_id":"","url":"https://api.github.com/users/monotkate","html_url":"https://github.com/monotkate","followers_url":"https://api.github.com/users/monotkate/followers","following_url":"https://api.github.com/users/monotkate/following{/other_user}","gists_url":"https://api.github.com/users/monotkate/gists{/gist_id}","starred_url":"https://api.github.com/users/monotkate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monotkate/subscriptions","organizations_url":"https://api.github.com/users/monotkate/orgs","repos_url":"https://api.github.com/users/monotkate/repos","events_url":"https://api.github.com/users/monotkate/events{/privacy}","received_events_url":"https://api.github.com/users/monotkate/received_events","type":"User","site_admin":false},"repo":{"id":44982061,"name":"flintandsteel","full_name":"monotkate/flintandsteel","owner":{"login":"monotkate","id":11742296,"avatar_url":"https://avatars.githubusercontent.com/u/11742296?v=3","gravatar_id":"","url":"https://api.github.com/users/monotkate","html_url":"https://github.com/monotkate","followers_url":"https://api.github.com/users/monotkate/followers","following_url":"https://api.github.com/users/monotkate/following{/other_user}","gists_url":"https://api.github.com/users/monotkate/gists{/gist_id}","starred_url":"https://api.github.com/users/monotkate/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/monotkate/subscriptions","organizations_url":"https://api.github.com/users/monotkate/orgs","repos_url":"https://api.github.com/users/monotkate/repos","events_url":"https://api.github.com/users/monotkate/events{/privacy}","received_events_url":"https://api.github.com/users/monotkate/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/monotkate/flintandsteel","description":"Cleveland Innovation Challenge 2015 Team #SynergisticSiloBusters","fork":true,"url":"https://api.github.com/repos/monotkate/flintandsteel","forks_url":"https://api.github.com/repos/monotkate/flintandsteel/forks","keys_url":"https://api.github.com/repos/monotkate/flintandsteel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/monotkate/flintandsteel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/monotkate/flintandsteel/teams","hooks_url":"https://api.github.com/repos/monotkate/flintandsteel/hooks","issue_events_url":"https://api.github.com/repos/monotkate/flintandsteel/issues/events{/number}","events_url":"https://api.github.com/repos/monotkate/flintandsteel/events","assignees_url":"https://api.github.com/repos/monotkate/flintandsteel/assignees{/user}","branches_url":"https://api.github.com/repos/monotkate/flintandsteel/branches{/branch}","tags_url":"https://api.github.com/repos/monotkate/flintandsteel/tags","blobs_url":"https://api.github.com/repos/monotkate/flintandsteel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/monotkate/flintandsteel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/monotkate/flintandsteel/git/refs{/sha}","trees_url":"https://api.github.com/repos/monotkate/flintandsteel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/monotkate/flintandsteel/statuses/{sha}","languages_url":"https://api.github.com/repos/monotkate/flintandsteel/languages","stargazers_url":"https://api.github.com/repos/monotkate/flintandsteel/stargazers","contributors_url":"https://api.github.com/repos/monotkate/flintandsteel/contributors","subscribers_url":"https://api.github.com/repos/monotkate/flintandsteel/subscribers","subscription_url":"https://api.github.com/repos/monotkate/flintandsteel/subscription","commits_url":"https://api.github.com/repos/monotkate/flintandsteel/commits{/sha}","git_commits_url":"https://api.github.com/repos/monotkate/flintandsteel/git/commits{/sha}","comments_url":"https://api.github.com/repos/monotkate/flintandsteel/comments{/number}","issue_comment_url":"https://api.github.com/repos/monotkate/flintandsteel/issues/comments{/number}","contents_url":"https://api.github.com/repos/monotkate/flintandsteel/contents/{+path}","compare_url":"https://api.github.com/repos/monotkate/flintandsteel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/monotkate/flintandsteel/merges","archive_url":"https://api.github.com/repos/monotkate/flintandsteel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/monotkate/flintandsteel/downloads","issues_url":"https://api.github.com/repos/monotkate/flintandsteel/issues{/number}","pulls_url":"https://api.github.com/repos/monotkate/flintandsteel/pulls{/number}","milestones_url":"https://api.github.com/repos/monotkate/flintandsteel/milestones{/number}","notifications_url":"https://api.github.com/repos/monotkate/flintandsteel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/monotkate/flintandsteel/labels{/name}","releases_url":"https://api.github.com/repos/monotkate/flintandsteel/releases{/id}","created_at":"2015-10-26T16:33:32Z","updated_at":"2015-10-26T16:33:33Z","pushed_at":"2016-01-05T16:15:04Z","git_url":"git://github.com/monotkate/flintandsteel.git","ssh_url":"git@github.com:monotkate/flintandsteel.git","clone_url":"https://github.com/monotkate/flintandsteel.git","svn_url":"https://github.com/monotkate/flintandsteel","homepage":"","size":1921,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"YashdalfTheGray:master","ref":"master","sha":"3bb2e5ecb9bbd3cd1a3d3dca5cee0f9383277be6","user":{"login":"YashdalfTheGray","id":3102848,"avatar_url":"https://avatars.githubusercontent.com/u/3102848?v=3","gravatar_id":"","url":"https://api.github.com/users/YashdalfTheGray","html_url":"https://github.com/YashdalfTheGray","followers_url":"https://api.github.com/users/YashdalfTheGray/followers","following_url":"https://api.github.com/users/YashdalfTheGray/following{/other_user}","gists_url":"https://api.github.com/users/YashdalfTheGray/gists{/gist_id}","starred_url":"https://api.github.com/users/YashdalfTheGray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/YashdalfTheGray/subscriptions","organizations_url":"https://api.github.com/users/YashdalfTheGray/orgs","repos_url":"https://api.github.com/users/YashdalfTheGray/repos","events_url":"https://api.github.com/users/YashdalfTheGray/events{/privacy}","received_events_url":"https://api.github.com/users/YashdalfTheGray/received_events","type":"User","site_admin":false},"repo":{"id":34150685,"name":"flintandsteel","full_name":"YashdalfTheGray/flintandsteel","owner":{"login":"YashdalfTheGray","id":3102848,"avatar_url":"https://avatars.githubusercontent.com/u/3102848?v=3","gravatar_id":"","url":"https://api.github.com/users/YashdalfTheGray","html_url":"https://github.com/YashdalfTheGray","followers_url":"https://api.github.com/users/YashdalfTheGray/followers","following_url":"https://api.github.com/users/YashdalfTheGray/following{/other_user}","gists_url":"https://api.github.com/users/YashdalfTheGray/gists{/gist_id}","starred_url":"https://api.github.com/users/YashdalfTheGray/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/YashdalfTheGray/subscriptions","organizations_url":"https://api.github.com/users/YashdalfTheGray/orgs","repos_url":"https://api.github.com/users/YashdalfTheGray/repos","events_url":"https://api.github.com/users/YashdalfTheGray/events{/privacy}","received_events_url":"https://api.github.com/users/YashdalfTheGray/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/YashdalfTheGray/flintandsteel","description":"Cleveland Innovation Challenge 2015 Team #SynergisticSiloBusters","fork":false,"url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel","forks_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/forks","keys_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/keys{/key_id}","collaborators_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/teams","hooks_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/hooks","issue_events_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues/events{/number}","events_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/events","assignees_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/assignees{/user}","branches_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/branches{/branch}","tags_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/tags","blobs_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/git/refs{/sha}","trees_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/git/trees{/sha}","statuses_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/statuses/{sha}","languages_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/languages","stargazers_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/stargazers","contributors_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/contributors","subscribers_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/subscribers","subscription_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/subscription","commits_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/commits{/sha}","git_commits_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/git/commits{/sha}","comments_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/comments{/number}","issue_comment_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues/comments{/number}","contents_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/contents/{+path}","compare_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/compare/{base}...{head}","merges_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/merges","archive_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/downloads","issues_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues{/number}","pulls_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls{/number}","milestones_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/milestones{/number}","notifications_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/labels{/name}","releases_url":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/releases{/id}","created_at":"2015-04-18T03:20:39Z","updated_at":"2015-11-13T16:19:07Z","pushed_at":"2016-01-05T16:21:56Z","git_url":"git://github.com/YashdalfTheGray/flintandsteel.git","ssh_url":"git@github.com:YashdalfTheGray/flintandsteel.git","clone_url":"https://github.com/YashdalfTheGray/flintandsteel.git","svn_url":"https://github.com/YashdalfTheGray/flintandsteel","homepage":"","size":2036,"stargazers_count":6,"watchers_count":6,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8,"mirror_url":null,"open_issues_count":22,"forks":8,"open_issues":22,"watchers":6,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226"},"html":{"href":"https://github.com/YashdalfTheGray/flintandsteel/pull/226"},"issue":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues/226"},"comments":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/issues/226/comments"},"review_comments":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226/comments"},"review_comment":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/pulls/226/commits"},"statuses":{"href":"https://api.github.com/repos/YashdalfTheGray/flintandsteel/statuses/792b7108a06047b01bd420c95cf07f0ade1a08e3"}}}}