295 lines
7.7 KiB
CoffeeScript
295 lines
7.7 KiB
CoffeeScript
###
|
|
# Copyright (C) 2014-2015 Taiga Agile LLC <taiga@taiga.io>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
# File: import-project.service.spec.coffee
|
|
###
|
|
|
|
describe "tgImportProjectService", ->
|
|
$provide = null
|
|
importProjectService = null
|
|
mocks = {}
|
|
|
|
_mockCurrentUserService = ->
|
|
mocks.currentUserService = {
|
|
loadProjects: sinon.stub(),
|
|
getUser: sinon.stub(),
|
|
canCreatePrivateProjects: sinon.stub(),
|
|
canCreatePublicProjects: sinon.stub()
|
|
}
|
|
|
|
$provide.value("tgCurrentUserService", mocks.currentUserService)
|
|
|
|
_mockAuth = ->
|
|
mocks.auth = {
|
|
refresh: sinon.stub()
|
|
}
|
|
|
|
$provide.value("$tgAuth", mocks.auth)
|
|
|
|
_mockLightboxFactory = ->
|
|
mocks.lightboxFactory = {
|
|
create: sinon.stub()
|
|
}
|
|
|
|
$provide.value("tgLightboxFactory", mocks.lightboxFactory)
|
|
|
|
_mockTranslate = ->
|
|
mocks.translate = {
|
|
instant: sinon.stub()
|
|
}
|
|
|
|
$provide.value("$translate", mocks.translate)
|
|
|
|
_mockConfirm = ->
|
|
mocks.confirm = {
|
|
success: sinon.stub(),
|
|
notify: sinon.stub()
|
|
}
|
|
|
|
$provide.value("$tgConfirm", mocks.confirm)
|
|
|
|
_mockLocation = ->
|
|
mocks.location = {
|
|
path: sinon.stub()
|
|
}
|
|
|
|
$provide.value("$location", mocks.location)
|
|
|
|
_mockNavUrls = ->
|
|
mocks.navUrls = {
|
|
resolve: sinon.stub()
|
|
}
|
|
|
|
$provide.value("$tgNavUrls", mocks.navUrls)
|
|
|
|
_mocks = ->
|
|
module (_$provide_) ->
|
|
$provide = _$provide_
|
|
|
|
_mockCurrentUserService()
|
|
_mockAuth()
|
|
_mockLightboxFactory()
|
|
_mockTranslate()
|
|
_mockConfirm()
|
|
_mockLocation()
|
|
_mockNavUrls()
|
|
|
|
return null
|
|
|
|
_inject = ->
|
|
inject (_tgImportProjectService_) ->
|
|
importProjectService = _tgImportProjectService_
|
|
|
|
_setup = ->
|
|
_mocks()
|
|
_inject()
|
|
|
|
beforeEach ->
|
|
module "taigaProjects"
|
|
|
|
_setup()
|
|
|
|
it "import success async mode", (done) ->
|
|
result = {
|
|
status: 202,
|
|
data: {
|
|
slug: 'project-slug'
|
|
}
|
|
}
|
|
|
|
mocks.translate.instant.returns('xxx')
|
|
|
|
mocks.currentUserService.loadProjects.promise().resolve()
|
|
|
|
importProjectService.importSuccess(result).then () ->
|
|
expect(mocks.confirm.success).have.been.calledOnce
|
|
done()
|
|
|
|
it "import success sync mode", (done) ->
|
|
result = {
|
|
status: 201,
|
|
data: {
|
|
slug: 'project-slug'
|
|
}
|
|
}
|
|
|
|
mocks.translate.instant.returns('msg')
|
|
|
|
mocks.navUrls.resolve.withArgs('project-admin-project-profile-details', {project: 'project-slug'}).returns('url')
|
|
|
|
mocks.currentUserService.loadProjects.promise().resolve()
|
|
|
|
importProjectService.importSuccess(result).then () ->
|
|
expect(mocks.location.path).have.been.calledWith('url')
|
|
expect(mocks.confirm.notify).have.been.calledWith('success', 'msg')
|
|
done()
|
|
|
|
it "private get restriction errors, private & member error", () ->
|
|
result = {
|
|
headers: {
|
|
isPrivate: true,
|
|
memberships: 10
|
|
}
|
|
}
|
|
|
|
mocks.currentUserService.getUser.returns(Immutable.fromJS({
|
|
max_memberships_private_projects: 1
|
|
}))
|
|
|
|
mocks.currentUserService.canCreatePrivateProjects.returns({
|
|
valid: false
|
|
})
|
|
|
|
error = importProjectService.getRestrictionError(result)
|
|
|
|
expect(error).to.be.eql({
|
|
key: 'private-space-members',
|
|
values: {
|
|
max_memberships: 1,
|
|
members: 10
|
|
}
|
|
})
|
|
|
|
it "private get restriction errors, private limit error", () ->
|
|
result = {
|
|
headers: {
|
|
isPrivate: true,
|
|
memberships: 10
|
|
}
|
|
}
|
|
|
|
mocks.currentUserService.getUser.returns(Immutable.fromJS({
|
|
max_memberships_private_projects: 20
|
|
}))
|
|
|
|
mocks.currentUserService.canCreatePrivateProjects.returns({
|
|
valid: false
|
|
})
|
|
|
|
error = importProjectService.getRestrictionError(result)
|
|
|
|
expect(error).to.be.eql({
|
|
key: 'private-space',
|
|
values: {
|
|
max_memberships: null,
|
|
members: 10
|
|
}
|
|
})
|
|
|
|
it "private get restriction errors, members error", () ->
|
|
result = {
|
|
headers: {
|
|
isPrivate: true,
|
|
memberships: 10
|
|
}
|
|
}
|
|
|
|
mocks.currentUserService.getUser.returns(Immutable.fromJS({
|
|
max_memberships_private_projects: 1
|
|
}))
|
|
|
|
mocks.currentUserService.canCreatePrivateProjects.returns({
|
|
valid: true
|
|
})
|
|
|
|
error = importProjectService.getRestrictionError(result)
|
|
|
|
expect(error).to.be.eql({
|
|
key: 'private-members',
|
|
values: {
|
|
max_memberships: 1,
|
|
members: 10
|
|
}
|
|
})
|
|
|
|
it "public get restriction errors, public & member error", () ->
|
|
result = {
|
|
headers: {
|
|
isPrivate: false,
|
|
memberships: 10
|
|
}
|
|
}
|
|
|
|
mocks.currentUserService.getUser.returns(Immutable.fromJS({
|
|
max_memberships_public_projects: 1
|
|
}))
|
|
|
|
mocks.currentUserService.canCreatePublicProjects.returns({
|
|
valid: false
|
|
})
|
|
|
|
error = importProjectService.getRestrictionError(result)
|
|
|
|
expect(error).to.be.eql({
|
|
key: 'public-space-members',
|
|
values: {
|
|
max_memberships: 1,
|
|
members: 10
|
|
}
|
|
})
|
|
|
|
it "public get restriction errors, public limit error", () ->
|
|
result = {
|
|
headers: {
|
|
isPrivate: false,
|
|
memberships: 10
|
|
}
|
|
}
|
|
|
|
mocks.currentUserService.getUser.returns(Immutable.fromJS({
|
|
max_memberships_public_projects: 20
|
|
}))
|
|
|
|
mocks.currentUserService.canCreatePublicProjects.returns({
|
|
valid: false
|
|
})
|
|
|
|
error = importProjectService.getRestrictionError(result)
|
|
|
|
expect(error).to.be.eql({
|
|
key: 'public-space',
|
|
values: {
|
|
max_memberships: null,
|
|
members: 10
|
|
}
|
|
})
|
|
|
|
it "public get restriction errors, members error", () ->
|
|
result = {
|
|
headers: {
|
|
isPrivate: false,
|
|
memberships: 10
|
|
}
|
|
}
|
|
|
|
mocks.currentUserService.getUser.returns(Immutable.fromJS({
|
|
max_memberships_public_projects: 1
|
|
}))
|
|
|
|
mocks.currentUserService.canCreatePublicProjects.returns({
|
|
valid: true
|
|
})
|
|
|
|
error = importProjectService.getRestrictionError(result)
|
|
|
|
expect(error).to.be.eql({
|
|
key: 'public-members',
|
|
values: {
|
|
max_memberships: 1,
|
|
members: 10
|
|
}
|
|
})
|