taiga-front/app/modules/profile/profile.controller.spec.coffee

132 lines
3.0 KiB
CoffeeScript

describe "ProfileController", ->
provide = null
$controller = null
$rootScope = null
mocks = {}
projects = Immutable.fromJS([
{id: 1},
{id: 2},
{id: 3}
])
_mockAppTitle = () ->
stub = sinon.stub()
mocks.appTitle = {
set: sinon.spy()
}
provide.value "$appTitle", mocks.appTitle
_mockCurrentUser = () ->
stub = sinon.stub()
mocks.currentUser = {
getUser: sinon.stub()
}
provide.value "tgCurrentUserService", mocks.currentUser
_mockUserService = () ->
stub = sinon.stub()
mocks.userService = {
getUserByUserName: sinon.stub()
}
provide.value "tgUserService", mocks.userService
_mockRouteParams = () ->
stub = sinon.stub()
mocks.routeParams = {}
provide.value "$routeParams", mocks.routeParams
_mockXhrErrorService = () ->
stub = sinon.stub()
mocks.xhrErrorService = {
response: sinon.spy()
}
provide.value "tgXhrErrorService", mocks.xhrErrorService
_mocks = () ->
module ($provide) ->
provide = $provide
_mockAppTitle()
_mockCurrentUser()
_mockRouteParams()
_mockUserService()
_mockXhrErrorService()
return null
_inject = (callback) ->
inject (_$controller_, _$rootScope_) ->
$rootScope = _$rootScope_
$controller = _$controller_
beforeEach ->
module "taigaProfile"
_mocks()
_inject()
it "define external user", (done) ->
$scope = $rootScope.$new()
mocks.routeParams.slug = "user-slug"
user = Immutable.fromJS({
full_name: "full-name"
})
mocks.userService.getUserByUserName.withArgs(mocks.routeParams.slug).promise().resolve(user)
ctrl = $controller("Profile")
setTimeout ( ->
expect(ctrl.user).to.be.equal(user)
expect(ctrl.isCurrentUser).to.be.false
expect(mocks.appTitle.set.calledWithExactly("full-name")).to.be.true
done()
)
it "non-existent user", (done) ->
$scope = $rootScope.$new()
mocks.routeParams.slug = "user-slug"
xhr = {
status: 404
}
mocks.userService.getUserByUserName.withArgs(mocks.routeParams.slug).promise().reject(xhr)
ctrl = $controller("Profile")
setTimeout ( ->
expect(mocks.xhrErrorService.response.withArgs(xhr)).to.be.calledOnce
done()
)
it "define current user", () ->
$scope = $rootScope.$new()
user = Immutable.fromJS({
full_name_display: "full-name-display"
})
mocks.currentUser.getUser.returns(user)
ctrl = $controller("Profile")
expect(ctrl.user).to.be.equal(user)
expect(ctrl.isCurrentUser).to.be.true
expect(mocks.appTitle.set.calledWithExactly("full-name-display")).to.be.true