fix profile projects tags
parent
25d3cdadce
commit
623b562192
|
@ -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)
|
||||
|
|
|
@ -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) ->
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 = {}
|
||||
|
|
|
@ -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}"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue