fix profile projects tags

stable
Juanfran 2015-05-13 16:36:19 +02:00
parent 25d3cdadce
commit 623b562192
8 changed files with 87 additions and 84 deletions

View File

@ -1,20 +1,20 @@
class ProfileProjectsController class ProfileProjectsController
@.$inject = [ @.$inject = [
"tgProjectsService",
"tgUserService", "tgUserService",
"$tgAuth" "$tgAuth"
] ]
constructor: (@userService, @auth) -> constructor: (@projectsService, @userService, @auth) ->
loadProjects: () -> loadProjects: () ->
userId = @auth.getUser().id userId = @auth.getUser().id
@userService.getProjects(userId) @projectsService.getProjectsByUserId(userId)
.then (projects) => .then (projects) =>
return @userService.attachUserContactsToProjects(userId, projects) return @userService.attachUserContactsToProjects(userId, projects)
.then (projects) => .then (projects) =>
@.projects = projects @.projects = projects
console.log @.projects.toJS()
angular.module("taigaProfile") angular.module("taigaProfile")
.controller("ProfileProjects", ProfileProjectsController) .controller("ProfileProjects", ProfileProjectsController)

View File

@ -7,12 +7,18 @@ describe "ProfileProjects", ->
_mockUserService = () -> _mockUserService = () ->
mocks.userService = { mocks.userService = {
getProjects: sinon.stub(),
attachUserContactsToProjects: sinon.stub() attachUserContactsToProjects: sinon.stub()
} }
provide.value "tgUserService", mocks.userService provide.value "tgUserService", mocks.userService
_mockProjectsService = () ->
mocks.projectsService = {
getProjectsByUserId: sinon.stub()
}
provide.value "tgProjectsService", mocks.projectsService
_mockAuthService = () -> _mockAuthService = () ->
stub = sinon.stub() stub = sinon.stub()
@ -27,6 +33,7 @@ describe "ProfileProjects", ->
provide = $provide provide = $provide
_mockUserService() _mockUserService()
_mockAuthService() _mockAuthService()
_mockProjectsService()
return null return null
@ -55,7 +62,7 @@ describe "ProfileProjects", ->
{id: 3, contacts: "fake"} {id: 3, contacts: "fake"}
] ]
mocks.userService.getProjects = (userId) -> mocks.projectsService.getProjectsByUserId = (userId) ->
expect(userId).to.be.equal(userId) expect(userId).to.be.equal(userId)
return $q (resolve, reject) -> return $q (resolve, reject) ->

View File

@ -2,9 +2,9 @@ taiga = @.taiga
groupBy = @.taiga.groupBy groupBy = @.taiga.groupBy
class ProjectsService extends taiga.Service 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() @._currentUserProjects = Immutable.Map()
@._currentUserProjectsById = Immutable.Map() @._currentUserProjectsById = Immutable.Map()
@._inProgress = false @._inProgress = false
@ -24,30 +24,35 @@ class ProjectsService extends taiga.Service
getProjectStats: (projectId) -> getProjectStats: (projectId) ->
return @rs.projects.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: -> fetchProjects: ->
if not @._inProgress if not @._inProgress
@._inProgress = true @._inProgress = true
@._currentUserProjectsPromise = @rs.users.getProjects(@rootScope.user?.id) @._currentUserProjectsPromise = @.getProjectsByUserId(@auth.userData.get("id"))
@._currentUserProjectsPromise.then (projects) => @._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("all", projects)
@._currentUserProjects = @._currentUserProjects.set("recents", projects.slice(0, 10)) @._currentUserProjects = @._currentUserProjects.set("recents", projects.slice(0, 10))
@ -69,4 +74,5 @@ class ProjectsService extends taiga.Service
@rs.projects.bulkUpdateOrder(sortData).then => @rs.projects.bulkUpdateOrder(sortData).then =>
@.fetchProjects() @.fetchProjects()
angular.module("taigaProjects").service("tgProjectsService", ProjectsService) angular.module("taigaProjects").service("tgProjectsService
", ProjectsService)

View File

@ -1,26 +1,23 @@
describe "tgProjects", -> describe "tgProjects", ->
projectsService = provide = null projectsService = provide = $rootScope = null
$q = null
mocks = {} mocks = {}
_mockResources = () -> _mockResources = () ->
mocks.resources = {} mocks.resources = {}
mocks.resources.users = { mocks.resources.projects = {}
getProjects: sinon.stub()
}
mocks.thenStub = sinon.stub() mocks.resources.projects.getProjectsByUserId = () ->
mocks.finallyStub = sinon.stub() return $q (resolve) ->
resolve(Immutable.fromJS([]))
mocks.resources.users.getProjects.withArgs(10).returns({
then: mocks.thenStub
finally: mocks.finallyStub
})
provide.value "tgResources", mocks.resources provide.value "tgResources", mocks.resources
_mockRootScope = () -> _mockAuthService = () ->
provide.value "$rootScope", {user: {id: 10}} mocks.auth = {userData: Immutable.fromJS({id: 10})}
provide.value "$tgAuth", mocks.auth
_mockProjectUrl = () -> _mockProjectUrl = () ->
mocks.projectUrl = {get: sinon.stub()} mocks.projectUrl = {get: sinon.stub()}
@ -38,6 +35,12 @@ describe "tgProjects", ->
provide.value "tgLightboxFactory", mocks.lightboxFactory provide.value "tgLightboxFactory", mocks.lightboxFactory
_inject = (callback) -> _inject = (callback) ->
inject (_$q_, _$rootScope_) ->
$q = _$q_
$rootScope = _$rootScope_
callback() if callback
_injectService = (callback) ->
inject (_tgProjectsService_) -> inject (_tgProjectsService_) ->
projectsService = _tgProjectsService_ projectsService = _tgProjectsService_
callback() if callback callback() if callback
@ -46,18 +49,15 @@ describe "tgProjects", ->
module ($provide) -> module ($provide) ->
provide = $provide provide = $provide
_mockResources() _mockResources()
_mockRootScope()
_mockProjectUrl() _mockProjectUrl()
_mockLightboxFactory() _mockLightboxFactory()
_mockAuthService()
return null return null
_setup = ->
_mocks()
beforeEach -> beforeEach ->
module "taigaProjects" module "taigaProjects"
_setup() _mocks()
_inject() _inject()
describe "fetch items", -> describe "fetch items", ->
@ -79,8 +79,15 @@ describe "tgProjects", ->
{"id": 12, url: 'url-12'} {"id": 12, url: 'url-12'}
] ]
mocks.resources.projects.getProjectsByUserId = () ->
return $q (resolve) ->
resolve(Immutable.fromJS(projects))
_injectService()
it "all & recents filled", () -> 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("all").toJS()).to.be.eql(projects)
expect(projectsService.currentUserProjects.get("recents").toJS()).to.be.eql(projects.slice(0, 10)) 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", () -> it "_inProgress change to false when tgResources end", () ->
expect(projectsService._inProgress).to.be.true expect(projectsService._inProgress).to.be.true
mocks.thenStub.callArg(0, Immutable.fromJS(projects)) $rootScope.$digest()
mocks.finallyStub.callArg(0)
expect(projectsService._inProgress).to.be.false 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", () -> 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.size).to.be.equal(12)
expect(projectsService.currentUserProjectsById.toJS()[1].id).to.be.equal(projects[0].id) expect(projectsService.currentUserProjectsById.toJS()[1].id).to.be.equal(projects[0].id)
it "add urls in the project object", () -> 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.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("all").toJS()[0].url).to.be.equal("url-1")
expect(projectsService.currentUserProjects.get("recents").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", () -> it "add sorted colorized_tags project object", () ->
mocks.thenStub.callArg(0, Immutable.fromJS(projects)) $rootScope.$digest()
tags = [ tags = [
{name: "aa", color: "white"}, {name: "aa", color: "white"},
@ -129,6 +127,8 @@ describe "tgProjects", ->
expect(colorized_tags).to.be.eql(tags) expect(colorized_tags).to.be.eql(tags)
it "newProject, create the wizard lightbox", () -> it "newProject, create the wizard lightbox", () ->
_injectService()
projectsService.newProject() projectsService.newProject()
expect(mocks.lightboxFactory.create).to.have.been.calledWith("tg-lb-create-project", { 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", () -> it "bulkUpdateProjectsOrder and then fetch projects again", () ->
_injectService()
projects_order = [ projects_order = [
{"id": 8}, {"id": 8},
{"id": 2}, {"id": 2},
@ -168,6 +170,8 @@ describe "tgProjects", ->
expect(projectsService.fetchProjects).to.have.been.calledOnce expect(projectsService.fetchProjects).to.have.been.calledOnce
it "getProjectBySlug", () -> it "getProjectBySlug", () ->
_injectService()
projectSlug = "project-slug" projectSlug = "project-slug"
mocks.resources.projects = {} mocks.resources.projects = {}
@ -177,6 +181,8 @@ describe "tgProjects", ->
expect(projectsService.getProjectBySlug(projectSlug)).to.be.true expect(projectsService.getProjectBySlug(projectSlug)).to.be.true
it "getProjectStats", () -> it "getProjectStats", () ->
_injectService()
projectId = 3 projectId = 3
mocks.resources.projects = {} mocks.resources.projects = {}

View File

@ -10,6 +10,15 @@ Resource = (urlsService, http) ->
.then (result) -> .then (result) ->
return Immutable.fromJS(result.data) 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) -> service.getProjectStats = (projectId) ->
url = urlsService.resolve("projects") url = urlsService.resolve("projects")
url = "#{url}/#{projectId}" url = "#{url}/#{projectId}"

View File

@ -28,15 +28,6 @@ Resource = (urlsService, http) ->
.then (result) -> .then (result) ->
return Immutable.fromJS(result.data) 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) -> service.getTimeline = (userId, page) ->
params = { params = {
page: page page: page

View File

@ -5,9 +5,6 @@ class UserService extends taiga.Service
constructor: (@rs) -> constructor: (@rs) ->
getProjects: (userId) ->
return @rs.users.getProjects(userId)
getContacts: (userId) -> getContacts: (userId) ->
return @rs.users.getContacts(userId) return @rs.users.getContacts(userId)

View File

@ -32,19 +32,6 @@ describe "UserService", ->
_mocks() _mocks()
_inject() _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", () -> it "get user contacts", () ->
userId = 2 userId = 2