From 4f90941e36ea3453d3a45fdd608bfaed8f36b2d1 Mon Sep 17 00:00:00 2001 From: Juanfran Date: Tue, 2 Jun 2015 15:17:33 +0200 Subject: [PATCH] handle project load error in the project home --- .../project/project.controller.coffee | 10 +++- .../project/project.controller.spec.coffee | 57 ++++++++++++------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/app/modules/projects/project/project.controller.coffee b/app/modules/projects/project/project.controller.coffee index f130a358..2da83dc1 100644 --- a/app/modules/projects/project/project.controller.coffee +++ b/app/modules/projects/project/project.controller.coffee @@ -3,17 +3,21 @@ class ProjectController "tgProjectsService", "$routeParams", "$appTitle", - "$tgAuth" + "$tgAuth", + "tgXhrErrorService" ] - constructor: (@projectsService, @routeParams, @appTitle, @auth) -> + constructor: (@projectsService, @routeParams, @appTitle, @auth, @xhrError) -> projectSlug = @routeParams.pslug @.user = @auth.userData - @projectsService.getProjectBySlug(projectSlug) + @projectsService + .getProjectBySlug(projectSlug) .then (project) => @appTitle.set(project.get("name")) @.project = project + .catch (xhr) => + @xhrError.response(xhr) angular.module("taigaProjects").controller("Project", ProjectController) diff --git a/app/modules/projects/project/project.controller.spec.coffee b/app/modules/projects/project/project.controller.spec.coffee index 43528df7..b28d7f87 100644 --- a/app/modules/projects/project/project.controller.spec.coffee +++ b/app/modules/projects/project/project.controller.spec.coffee @@ -31,6 +31,13 @@ describe "ProjectController", -> pslug: "project-slug" } + _mockXhrErrorService = () -> + mocks.xhrErrorService = { + response: sinon.spy() + } + + provide.value "tgXhrErrorService", mocks.xhrErrorService + _mocks = () -> module ($provide) -> provide = $provide @@ -38,6 +45,7 @@ describe "ProjectController", -> _mockRouteParams() _mockAppTitle() _mockAuth() + _mockXhrErrorService() return null @@ -53,48 +61,53 @@ describe "ProjectController", -> _inject() it "set local user", () -> - thenStub = sinon.stub() - - mocks.projectService.getProjectBySlug.withArgs("project-slug").returns({ - then: thenStub + project = Immutable.fromJS({ + name: "projectName" }) + mocks.projectService.getProjectBySlug.withArgs("project-slug").promise().resolve(project) + ctrl = $controller "Project", $scope: {} expect(ctrl.user).to.be.equal(mocks.auth.userData) - it "set page title", () -> + it "set page title", (done) -> project = Immutable.fromJS({ name: "projectName" }) - thenStub = sinon.stub() - - mocks.projectService.getProjectBySlug.withArgs("project-slug").returns({ - then: thenStub - }) + mocks.projectService.getProjectBySlug.withArgs("project-slug").promise().resolve(project) ctrl = $controller("Project") - thenStub.callArg(0, project) + setTimeout ( -> + expect(mocks.appTitle.set.withArgs("projectName")).to.be.calledOnce + done() + ) - expect(mocks.appTitle.set.withArgs("projectName")).to.be.calledOnce - - - it "set local project variable", () -> + it "set local project variable", (done) -> project = Immutable.fromJS({ name: "projectName" }) - thenStub = sinon.stub() - - mocks.projectService.getProjectBySlug.withArgs("project-slug").returns({ - then: thenStub - }) + mocks.projectService.getProjectBySlug.withArgs("project-slug").promise().resolve(project) ctrl = $controller("Project") - thenStub.callArg(0, project) + setTimeout ( () -> + expect(ctrl.project).to.be.equal(project) + done() + ) - expect(ctrl.project).to.be.equal(project) + it "handle project error", (done) -> + xhr = {code: 403} + + mocks.projectService.getProjectBySlug.withArgs("project-slug").promise().reject(xhr) + + ctrl = $controller("Project") + + setTimeout (() -> + expect(mocks.xhrErrorService.response.withArgs(xhr)).to.be.calledOnce + done() + )