projects.service tests
parent
e080bf5196
commit
acebe5918d
|
@ -2,18 +2,19 @@ taiga = @.taiga
|
||||||
groupBy = @.taiga.groupBy
|
groupBy = @.taiga.groupBy
|
||||||
|
|
||||||
class ProjectsService extends taiga.Service
|
class ProjectsService extends taiga.Service
|
||||||
@.$inject = ["$q", "$tgResources", "$rootScope", "$projectUrl", "tgLightboxFactory"]
|
@.$inject = ["$tgResources", "$rootScope", "$projectUrl", "tgLightboxFactory"]
|
||||||
|
|
||||||
constructor: (@q, @rs, @rootScope, @projectUrl, @lightboxFactory) ->
|
constructor: (@rs, @rootScope, @projectUrl, @lightboxFactory) ->
|
||||||
@.projects = Immutable.Map()
|
@.projects = Immutable.Map()
|
||||||
@.projectsById = Immutable.Map()
|
@.projectsById = Immutable.Map()
|
||||||
@.inProgress = false
|
@._inProgress = false
|
||||||
@.projectsPromise = null
|
@.projectsPromise = null
|
||||||
@.fetchProjects()
|
@.fetchProjects()
|
||||||
|
|
||||||
fetchProjects: ->
|
fetchProjects: ->
|
||||||
if not @.inProgress
|
if not @._inProgress
|
||||||
@.inProgress = true
|
@._inProgress = true
|
||||||
|
|
||||||
@.projectsPromise = @rs.projects.listByMember(@rootScope.user?.id).then (projects) =>
|
@.projectsPromise = @rs.projects.listByMember(@rootScope.user?.id).then (projects) =>
|
||||||
for project in projects
|
for project in projects
|
||||||
project.url = @projectUrl.get(project)
|
project.url = @projectUrl.get(project)
|
||||||
|
@ -25,10 +26,10 @@ class ProjectsService extends taiga.Service
|
||||||
|
|
||||||
@.projectsById = Immutable.fromJS(groupBy(projects, (p) -> p.id))
|
@.projectsById = Immutable.fromJS(groupBy(projects, (p) -> p.id))
|
||||||
|
|
||||||
|
@._inProgress = false
|
||||||
|
|
||||||
return @.projects
|
return @.projects
|
||||||
|
|
||||||
@.projectsPromise.then () =>
|
|
||||||
@.inProgress = false
|
|
||||||
|
|
||||||
return @.projectsPromise
|
return @.projectsPromise
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,149 @@
|
||||||
|
describe "tgProjects", ->
|
||||||
|
projectsService = provide = null
|
||||||
|
mocks = {}
|
||||||
|
|
||||||
|
_mockResources = () ->
|
||||||
|
mocks.resources = {}
|
||||||
|
|
||||||
|
mocks.resources.projects = {
|
||||||
|
listByMember: sinon.stub()
|
||||||
|
}
|
||||||
|
|
||||||
|
mocks.thenStub = sinon.stub()
|
||||||
|
mocks.resources.projects.listByMember.withArgs(10).returns({
|
||||||
|
then: mocks.thenStub
|
||||||
|
})
|
||||||
|
|
||||||
|
provide.value "$tgResources", mocks.resources
|
||||||
|
|
||||||
|
_mockRootScope = () ->
|
||||||
|
provide.value "$rootScope", {user: {id: 10}}
|
||||||
|
|
||||||
|
_mockProjectUrl = () ->
|
||||||
|
mocks.projectUrl = {get: sinon.stub()}
|
||||||
|
|
||||||
|
mocks.projectUrl.get = (project) ->
|
||||||
|
return "url-" + project.id
|
||||||
|
|
||||||
|
provide.value "$projectUrl", mocks.projectUrl
|
||||||
|
|
||||||
|
_mockLightboxFactory = () ->
|
||||||
|
mocks.lightboxFactory = {
|
||||||
|
create: sinon.stub()
|
||||||
|
}
|
||||||
|
|
||||||
|
provide.value "tgLightboxFactory", mocks.lightboxFactory
|
||||||
|
|
||||||
|
_inject = (callback) ->
|
||||||
|
inject (_tgProjects_) ->
|
||||||
|
projectsService = _tgProjects_
|
||||||
|
callback() if callback
|
||||||
|
|
||||||
|
_mocks = () ->
|
||||||
|
module ($provide) ->
|
||||||
|
provide = $provide
|
||||||
|
_mockResources()
|
||||||
|
_mockRootScope()
|
||||||
|
_mockProjectUrl()
|
||||||
|
_mockLightboxFactory()
|
||||||
|
|
||||||
|
return null
|
||||||
|
|
||||||
|
_setup = ->
|
||||||
|
_mocks()
|
||||||
|
|
||||||
|
beforeEach ->
|
||||||
|
module "taigaProjects"
|
||||||
|
_setup()
|
||||||
|
_inject()
|
||||||
|
|
||||||
|
describe "fetch items", ->
|
||||||
|
projects = []
|
||||||
|
|
||||||
|
beforeEach ->
|
||||||
|
projects = [
|
||||||
|
{"id": 1},
|
||||||
|
{"id": 2},
|
||||||
|
{"id": 3},
|
||||||
|
{"id": 4},
|
||||||
|
{"id": 5},
|
||||||
|
{"id": 6},
|
||||||
|
{"id": 7},
|
||||||
|
{"id": 8},
|
||||||
|
{"id": 9},
|
||||||
|
{"id": 10},
|
||||||
|
{"id": 11},
|
||||||
|
{"id": 12},
|
||||||
|
]
|
||||||
|
|
||||||
|
it "all & recents filled", () ->
|
||||||
|
mocks.thenStub.callArg(0, projects)
|
||||||
|
|
||||||
|
expect(projectsService.projects.get("all").toJS()).to.be.eql(projects)
|
||||||
|
expect(projectsService.projects.get("recents").toJS()).to.be.eql(projects.slice(0, 10))
|
||||||
|
|
||||||
|
it "_inProgress change to false when tgResources end", () ->
|
||||||
|
expect(projectsService._inProgress).to.be.true
|
||||||
|
|
||||||
|
mocks.thenStub.callArg(0, projects)
|
||||||
|
|
||||||
|
expect(projectsService._inProgress).to.be.false
|
||||||
|
|
||||||
|
it "_inProgress prevent new ajax calls", () ->
|
||||||
|
projectsService.fetchProjects()
|
||||||
|
projectsService.fetchProjects()
|
||||||
|
|
||||||
|
mocks.thenStub.callArg(0, projects)
|
||||||
|
|
||||||
|
expect(mocks.resources.projects.listByMember).have.been.calledOnce
|
||||||
|
|
||||||
|
it "group projects by id", () ->
|
||||||
|
mocks.thenStub.callArg(0, projects)
|
||||||
|
|
||||||
|
expect(projectsService.projectsById.size).to.be.equal(12)
|
||||||
|
expect(projectsService.projectsById.toJS()[1].id).to.be.equal(projects[0].id)
|
||||||
|
|
||||||
|
it "add urls in the project object", () ->
|
||||||
|
mocks.thenStub.callArg(0, projects)
|
||||||
|
|
||||||
|
expect(projectsService.projectsById.toJS()[1].url).to.be.equal("url-1")
|
||||||
|
expect(projectsService.projects.get("all").toJS()[0].url).to.be.equal("url-1")
|
||||||
|
expect(projectsService.projects.get("recents").toJS()[0].url).to.be.equal("url-1")
|
||||||
|
|
||||||
|
it "newProject, create the wizard lightbox", () ->
|
||||||
|
projectsService.newProject()
|
||||||
|
|
||||||
|
expect(mocks.lightboxFactory.create).to.have.been.calledWith("tg-lb-create-project", {
|
||||||
|
"class": "wizard-create-project"
|
||||||
|
})
|
||||||
|
|
||||||
|
it "bulkUpdateProjectsOrder and then fetch projects again", () ->
|
||||||
|
projects_order = [
|
||||||
|
{"id": 8},
|
||||||
|
{"id": 2},
|
||||||
|
{"id": 3},
|
||||||
|
{"id": 9},
|
||||||
|
{"id": 1},
|
||||||
|
{"id": 4},
|
||||||
|
{"id": 10},
|
||||||
|
{"id": 5},
|
||||||
|
{"id": 6},
|
||||||
|
{"id": 7},
|
||||||
|
{"id": 11},
|
||||||
|
{"id": 12},
|
||||||
|
]
|
||||||
|
|
||||||
|
thenStub = sinon.stub()
|
||||||
|
|
||||||
|
mocks.resources.projects.bulkUpdateOrder = sinon.stub()
|
||||||
|
mocks.resources.projects.bulkUpdateOrder.withArgs(projects_order).returns({
|
||||||
|
then: thenStub
|
||||||
|
})
|
||||||
|
|
||||||
|
projectsService.fetchProjects = sinon.stub()
|
||||||
|
|
||||||
|
projectsService.bulkUpdateProjectsOrder(projects_order)
|
||||||
|
|
||||||
|
thenStub.callArg(0)
|
||||||
|
|
||||||
|
expect(projectsService.fetchProjects).to.have.been.calledOnce
|
Loading…
Reference in New Issue