taiga-front/app/modules/components/attachments-full/attachments-full.controller...

239 lines
6.9 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: attchments.controller.spec.coffee
###
describe "AttachmentsController", ->
$provide = null
$controller = null
mocks = {}
_mockConfirm = ->
mocks.confirm = {}
$provide.value("$tgConfirm", mocks.confirm)
_mockTranslate = ->
mocks.translate = {
instant: sinon.stub()
}
$provide.value("$translate", mocks.translate)
_mockConfig = ->
mocks.config = {
get: sinon.stub()
}
$provide.value("$tgConfig", mocks.config)
_mockStorage = ->
mocks.storage = {
get: sinon.stub()
}
$provide.value("$tgStorage", mocks.storage)
_mockAttachmetsFullService = ->
mocks.attachmentsFullService = {}
$provide.value("tgAttachmentsFullService", mocks.attachmentsFullService)
_mockProjectService = ->
mocks.projectService = {
project: sinon.stub()
hasPermission: sinon.stub()
}
$provide.value("tgProjectService", mocks.projectService)
_mocks = ->
module (_$provide_) ->
$provide = _$provide_
_mockConfirm()
_mockTranslate()
_mockConfig()
_mockStorage()
_mockAttachmetsFullService()
_mockProjectService()
return null
_inject = ->
inject (_$controller_) ->
$controller = _$controller_
_setup = ->
_mocks()
_inject()
beforeEach ->
module "taigaComponents"
_setup()
it "toggle deprecated visibility", () ->
mocks.attachmentsFullService.toggleDeprecatedsVisible = sinon.spy()
ctrl = $controller("AttachmentsFull")
ctrl.toggleDeprecatedsVisible()
expect(mocks.attachmentsFullService.toggleDeprecatedsVisible).to.be.calledOnce
it "add attachment", () ->
mocks.attachmentsFullService.addAttachment = sinon.spy()
ctrl = $controller("AttachmentsFull")
file = Immutable.Map()
ctrl.projectId = 3
ctrl.objId = 30
ctrl.type = 'us'
ctrl.mode = 'list'
ctrl.addAttachment(file)
expect(mocks.attachmentsFullService.addAttachment).to.have.been.calledWith(3, 30, 'us', file, true)
it "add attachments", () ->
ctrl = $controller("AttachmentsFull")
ctrl.attachments = Immutable.List()
ctrl.addAttachment = sinon.spy()
files = [
{},
{},
{}
]
ctrl.addAttachments(files)
expect(ctrl.addAttachment).to.have.callCount(3)
describe "deleteattachments", () ->
it "success attachment", (done) ->
deleteFile = Immutable.Map()
mocks.attachmentsFullService.deleteAttachment = sinon.stub()
mocks.attachmentsFullService.deleteAttachment.withArgs(deleteFile, 'us').promise().resolve()
askResponse = {
finish: sinon.spy()
}
mocks.translate.instant.withArgs('ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT').returns('title')
mocks.translate.instant.withArgs('ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT').returns('message')
mocks.confirm.askOnDelete = sinon.stub()
mocks.confirm.askOnDelete.withArgs('title', 'message').promise().resolve(askResponse)
ctrl = $controller("AttachmentsFull")
ctrl.type = 'us'
ctrl.deleteAttachment(deleteFile).then () ->
expect(askResponse.finish).have.been.calledOnce
done()
it "error attachment", (done) ->
deleteFile = Immutable.Map()
mocks.attachmentsFullService.deleteAttachment = sinon.stub()
mocks.attachmentsFullService.deleteAttachment.withArgs(deleteFile, 'us').promise().reject(new Error('error'))
askResponse = {
finish: sinon.spy()
}
mocks.translate.instant.withArgs('ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT').returns('title')
mocks.translate.instant.withArgs('ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT').returns('message')
mocks.translate.instant.withArgs('ATTACHMENT.ERROR_DELETE_ATTACHMENT').returns('error')
mocks.confirm.askOnDelete = sinon.stub()
mocks.confirm.askOnDelete.withArgs('title', 'message').promise().resolve(askResponse)
mocks.confirm.notify = sinon.spy()
ctrl = $controller("AttachmentsFull")
ctrl.type = 'us'
ctrl.deleteAttachment(deleteFile).then () ->
expect(askResponse.finish.withArgs(false)).have.been.calledOnce
expect(mocks.confirm.notify.withArgs('error', null, 'error'))
done()
it "loadAttachments", () ->
mocks.attachmentsFullService.loadAttachments = sinon.spy()
ctrl = $controller("AttachmentsFull")
ctrl.projectId = 3
ctrl.objId = 30
ctrl.type = 'us'
ctrl.loadAttachments()
expect(mocks.attachmentsFullService.loadAttachments).to.have.been.calledWith('us', 30, 3)
it "reorder attachments", () ->
mocks.attachmentsFullService.reorderAttachment = sinon.spy()
ctrl = $controller("AttachmentsFull")
file = Immutable.Map()
ctrl.projectId = 3
ctrl.objId = 30
ctrl.type = 'us'
ctrl.reorderAttachment(file, 5)
expect(mocks.attachmentsFullService.reorderAttachment).to.have.been.calledWith('us', file, 5)
it "update attachment", () ->
mocks.attachmentsFullService.updateAttachment = sinon.spy()
ctrl = $controller("AttachmentsFull")
file = Immutable.Map()
ctrl.type = 'us'
ctrl.updateAttachment(file, 5)
expect(mocks.attachmentsFullService.updateAttachment).to.have.been.calledWith(file, 'us')
it "if attachments editable", () ->
mocks.projectService.project = true
ctrl = $controller("AttachmentsFull")
ctrl._isEditable()
expect(mocks.projectService.hasPermission).has.been.called
it "if attachments are not editable", () ->
mocks.projectService.project = false
ctrl = $controller("AttachmentsFull")
expect(ctrl._isEditable()).to.be.false