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
@.$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)

View File

@ -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) ->

View File

@ -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)

View File

@ -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 = {}

View File

@ -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}"

View File

@ -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

View File

@ -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)

View File

@ -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