diff --git a/app/modules/profile/profile-projects/profile-projects.controller.coffee b/app/modules/profile/profile-projects/profile-projects.controller.coffee index fe691826..a5c8c59c 100644 --- a/app/modules/profile/profile-projects/profile-projects.controller.coffee +++ b/app/modules/profile/profile-projects/profile-projects.controller.coffee @@ -1,20 +1,20 @@ class ProfileProjectsController @.$inject = [ + "tgProjectsService", "tgUserService", "$tgAuth" ] - constructor: (@userService, @auth) -> + constructor: (@projectsService, @userService, @auth) -> loadProjects: () -> userId = @auth.getUser().id - @userService.getProjects(userId) + @projectsService.getProjectsByUserId(userId) .then (projects) => return @userService.attachUserContactsToProjects(userId, projects) .then (projects) => @.projects = projects - console.log @.projects.toJS() angular.module("taigaProfile") .controller("ProfileProjects", ProfileProjectsController) diff --git a/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee b/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee index ab8988c4..f9062661 100644 --- a/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee +++ b/app/modules/profile/profile-projects/profile-projects.controller.spec.coffee @@ -7,12 +7,18 @@ describe "ProfileProjects", -> _mockUserService = () -> mocks.userService = { - getProjects: sinon.stub(), attachUserContactsToProjects: sinon.stub() } provide.value "tgUserService", mocks.userService + _mockProjectsService = () -> + mocks.projectsService = { + getProjectsByUserId: sinon.stub() + } + + provide.value "tgProjectsService", mocks.projectsService + _mockAuthService = () -> stub = sinon.stub() @@ -27,6 +33,7 @@ describe "ProfileProjects", -> provide = $provide _mockUserService() _mockAuthService() + _mockProjectsService() return null @@ -55,7 +62,7 @@ describe "ProfileProjects", -> {id: 3, contacts: "fake"} ] - mocks.userService.getProjects = (userId) -> + mocks.projectsService.getProjectsByUserId = (userId) -> expect(userId).to.be.equal(userId) return $q (resolve, reject) -> diff --git a/app/modules/projects/projects.service.coffee b/app/modules/projects/projects.service.coffee index a097ca9a..996944dd 100644 --- a/app/modules/projects/projects.service.coffee +++ b/app/modules/projects/projects.service.coffee @@ -2,9 +2,9 @@ taiga = @.taiga groupBy = @.taiga.groupBy class ProjectsService extends taiga.Service - @.$inject = ["tgResources", "$rootScope", "$projectUrl", "tgLightboxFactory"] + @.$inject = ["tgResources", "$tgAuth", "$projectUrl", "tgLightboxFactory"] - constructor: (@rs, @rootScope, @projectUrl, @lightboxFactory) -> + constructor: (@rs, @auth, @projectUrl, @lightboxFactory) -> @._currentUserProjects = Immutable.Map() @._currentUserProjectsById = Immutable.Map() @._inProgress = false @@ -24,30 +24,35 @@ class ProjectsService extends taiga.Service getProjectStats: (projectId) -> return @rs.projects.getProjectStats(projectId) + getProjectsByUserId: (userId) -> + return @rs.projects.getProjectsByUserId(userId) + .then (projects) => + return @._decorate(projects) + + _decorate: (projects) -> + return projects.map (project) => + url = @projectUrl.get(project.toJS()) + + project = project.set("url", url) + colorized_tags = [] + + if project.get("tags") + tags = project.get("tags").sort() + + colorized_tags = tags.map (tag) -> + color = project.get("tags_colors").get(tag) + return Immutable.fromJS({name: tag, color: color}) + + project = project.set("colorized_tags", colorized_tags) + + return project + fetchProjects: -> if not @._inProgress @._inProgress = true - @._currentUserProjectsPromise = @rs.users.getProjects(@rootScope.user?.id) + @._currentUserProjectsPromise = @.getProjectsByUserId(@auth.userData.get("id")) @._currentUserProjectsPromise.then (projects) => - projects = projects.map (project) => - url = @projectUrl.get(project.toJS()) - - project = project.set("url", url) - colorized_tags = [] - - if project.get("tags") - tags = project.get("tags").sort() - - colorized_tags = tags.map (tag) -> - color = project.get("tags_colors").get(tag) - return Immutable.fromJS({name: tag, color: color}) - - project = project.set("colorized_tags", colorized_tags) - - return project - - @._currentUserProjects = @._currentUserProjects.set("all", projects) @._currentUserProjects = @._currentUserProjects.set("recents", projects.slice(0, 10)) @@ -69,4 +74,5 @@ class ProjectsService extends taiga.Service @rs.projects.bulkUpdateOrder(sortData).then => @.fetchProjects() -angular.module("taigaProjects").service("tgProjectsService", ProjectsService) +angular.module("taigaProjects").service("tgProjectsService +", ProjectsService) diff --git a/app/modules/projects/projects.service.spec.coffee b/app/modules/projects/projects.service.spec.coffee index 0bc3eb70..e57fc68b 100644 --- a/app/modules/projects/projects.service.spec.coffee +++ b/app/modules/projects/projects.service.spec.coffee @@ -1,26 +1,23 @@ describe "tgProjects", -> - projectsService = provide = null + projectsService = provide = $rootScope = null + $q = null mocks = {} _mockResources = () -> mocks.resources = {} - mocks.resources.users = { - getProjects: sinon.stub() - } + mocks.resources.projects = {} - mocks.thenStub = sinon.stub() - mocks.finallyStub = sinon.stub() - - mocks.resources.users.getProjects.withArgs(10).returns({ - then: mocks.thenStub - finally: mocks.finallyStub - }) + mocks.resources.projects.getProjectsByUserId = () -> + return $q (resolve) -> + resolve(Immutable.fromJS([])) provide.value "tgResources", mocks.resources - _mockRootScope = () -> - provide.value "$rootScope", {user: {id: 10}} + _mockAuthService = () -> + mocks.auth = {userData: Immutable.fromJS({id: 10})} + + provide.value "$tgAuth", mocks.auth _mockProjectUrl = () -> mocks.projectUrl = {get: sinon.stub()} @@ -38,6 +35,12 @@ describe "tgProjects", -> provide.value "tgLightboxFactory", mocks.lightboxFactory _inject = (callback) -> + inject (_$q_, _$rootScope_) -> + $q = _$q_ + $rootScope = _$rootScope_ + callback() if callback + + _injectService = (callback) -> inject (_tgProjectsService_) -> projectsService = _tgProjectsService_ callback() if callback @@ -46,18 +49,15 @@ describe "tgProjects", -> module ($provide) -> provide = $provide _mockResources() - _mockRootScope() _mockProjectUrl() _mockLightboxFactory() + _mockAuthService() return null - _setup = -> - _mocks() - beforeEach -> module "taigaProjects" - _setup() + _mocks() _inject() describe "fetch items", -> @@ -79,8 +79,15 @@ describe "tgProjects", -> {"id": 12, url: 'url-12'} ] + mocks.resources.projects.getProjectsByUserId = () -> + return $q (resolve) -> + resolve(Immutable.fromJS(projects)) + + _injectService() + it "all & recents filled", () -> - mocks.thenStub.callArg(0, Immutable.fromJS(projects)) + projectsService.fetchProjects() + $rootScope.$digest() expect(projectsService.currentUserProjects.get("all").toJS()).to.be.eql(projects) expect(projectsService.currentUserProjects.get("recents").toJS()).to.be.eql(projects.slice(0, 10)) @@ -88,34 +95,25 @@ describe "tgProjects", -> it "_inProgress change to false when tgResources end", () -> expect(projectsService._inProgress).to.be.true - mocks.thenStub.callArg(0, Immutable.fromJS(projects)) - mocks.finallyStub.callArg(0) + $rootScope.$digest() expect(projectsService._inProgress).to.be.false - it "_inProgress prevent new ajax calls", () -> - projectsService.fetchProjects() - projectsService.fetchProjects() - - mocks.thenStub.callArg(0, Immutable.fromJS(projects)) - - expect(mocks.resources.users.getProjects).have.been.calledOnce - it "group projects by id", () -> - mocks.thenStub.callArg(0, Immutable.fromJS(projects)) + $rootScope.$digest() expect(projectsService.currentUserProjectsById.size).to.be.equal(12) expect(projectsService.currentUserProjectsById.toJS()[1].id).to.be.equal(projects[0].id) it "add urls in the project object", () -> - mocks.thenStub.callArg(0, Immutable.fromJS(projects)) + $rootScope.$digest() expect(projectsService.currentUserProjectsById.toJS()[1].url).to.be.equal("url-1") expect(projectsService.currentUserProjects.get("all").toJS()[0].url).to.be.equal("url-1") expect(projectsService.currentUserProjects.get("recents").toJS()[0].url).to.be.equal("url-1") it "add sorted colorized_tags project object", () -> - mocks.thenStub.callArg(0, Immutable.fromJS(projects)) + $rootScope.$digest() tags = [ {name: "aa", color: "white"}, @@ -129,6 +127,8 @@ describe "tgProjects", -> expect(colorized_tags).to.be.eql(tags) it "newProject, create the wizard lightbox", () -> + _injectService() + projectsService.newProject() expect(mocks.lightboxFactory.create).to.have.been.calledWith("tg-lb-create-project", { @@ -136,6 +136,8 @@ describe "tgProjects", -> }) it "bulkUpdateProjectsOrder and then fetch projects again", () -> + _injectService() + projects_order = [ {"id": 8}, {"id": 2}, @@ -168,6 +170,8 @@ describe "tgProjects", -> expect(projectsService.fetchProjects).to.have.been.calledOnce it "getProjectBySlug", () -> + _injectService() + projectSlug = "project-slug" mocks.resources.projects = {} @@ -177,6 +181,8 @@ describe "tgProjects", -> expect(projectsService.getProjectBySlug(projectSlug)).to.be.true it "getProjectStats", () -> + _injectService() + projectId = 3 mocks.resources.projects = {} diff --git a/app/modules/resources/projects-resource.service.coffee b/app/modules/resources/projects-resource.service.coffee index 14f59b0d..2a9d847f 100644 --- a/app/modules/resources/projects-resource.service.coffee +++ b/app/modules/resources/projects-resource.service.coffee @@ -10,6 +10,15 @@ Resource = (urlsService, http) -> .then (result) -> return Immutable.fromJS(result.data) + service.getProjectsByUserId = (userId) -> + url = urlsService.resolve("projects") + + params = {"member": userId, "order_by": "memberships__user_order"} + + return http.get(url, params) + .then (result) -> + return Immutable.fromJS(result.data) + service.getProjectStats = (projectId) -> url = urlsService.resolve("projects") url = "#{url}/#{projectId}" diff --git a/app/modules/resources/users-resource.service.coffee b/app/modules/resources/users-resource.service.coffee index e75490ee..c587e916 100644 --- a/app/modules/resources/users-resource.service.coffee +++ b/app/modules/resources/users-resource.service.coffee @@ -28,15 +28,6 @@ Resource = (urlsService, http) -> .then (result) -> return Immutable.fromJS(result.data) - service.getProjects = (userId) -> - url = urlsService.resolve("projects") - - params = {"member": userId, "order_by": "memberships__user_order"} - - return http.get(url, params) - .then (result) -> - return Immutable.fromJS(result.data) - service.getTimeline = (userId, page) -> params = { page: page diff --git a/app/modules/services/user.service.coffee b/app/modules/services/user.service.coffee index 83704a08..26ec4d1e 100644 --- a/app/modules/services/user.service.coffee +++ b/app/modules/services/user.service.coffee @@ -5,9 +5,6 @@ class UserService extends taiga.Service constructor: (@rs) -> - getProjects: (userId) -> - return @rs.users.getProjects(userId) - getContacts: (userId) -> return @rs.users.getContacts(userId) diff --git a/app/modules/services/user.service.spec.coffee b/app/modules/services/user.service.spec.coffee index 22d552e3..c1ef0cdb 100644 --- a/app/modules/services/user.service.spec.coffee +++ b/app/modules/services/user.service.spec.coffee @@ -32,19 +32,6 @@ describe "UserService", -> _mocks() _inject() - it "get user projects", () -> - userId = 2 - - projects = [ - {id: 1}, - {id: 2}, - {id: 3} - ] - - mocks.resources.users.getProjects.withArgs(userId).returns(true) - - expect(userService.getProjects(userId)).to.be.true - it "get user contacts", () -> userId = 2