projects.service tests

stable
Juanfran 2015-04-28 12:49:39 +02:00
parent e080bf5196
commit acebe5918d
2 changed files with 157 additions and 7 deletions

View File

@ -2,18 +2,19 @@ taiga = @.taiga
groupBy = @.taiga.groupBy
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()
@.projectsById = Immutable.Map()
@.inProgress = false
@._inProgress = false
@.projectsPromise = null
@.fetchProjects()
fetchProjects: ->
if not @.inProgress
@.inProgress = true
if not @._inProgress
@._inProgress = true
@.projectsPromise = @rs.projects.listByMember(@rootScope.user?.id).then (projects) =>
for project in projects
project.url = @projectUrl.get(project)
@ -25,10 +26,10 @@ class ProjectsService extends taiga.Service
@.projectsById = Immutable.fromJS(groupBy(projects, (p) -> p.id))
@._inProgress = false
return @.projects
@.projectsPromise.then () =>
@.inProgress = false
return @.projectsPromise

View File

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