diff --git a/app/modules/epics/create-epic/create-epic.controller.coffee b/app/modules/epics/create-epic/create-epic.controller.coffee index 1fcbb4d9..570ab10c 100644 --- a/app/modules/epics/create-epic/create-epic.controller.coffee +++ b/app/modules/epics/create-epic/create-epic.controller.coffee @@ -57,6 +57,8 @@ class CreateEpicController promise.finally () => @.loading = false + return promise + # Color selector selectColor: (color) -> @.newEpic.color = color @@ -76,8 +78,8 @@ class CreateEpicController @.attachments.push(attachment) _createAttachments: (epic) -> - promises = _.map @.attachments.toJS(), (attachment) -> - return attachmentsService.upload(attachment.file, epic.id, epic.project, 'epic') + promises = _.map @.attachments.toJS(), (attachment) => + return @attachmentsService.upload(attachment.file, epic.id, epic.project, 'epic') return @q.all(promises) angular.module("taigaEpics").controller("CreateEpicCtrl", CreateEpicController) diff --git a/app/modules/epics/create-epic/create-epic.controller.spec.coffee b/app/modules/epics/create-epic/create-epic.controller.spec.coffee index 3453206d..fa713fd4 100644 --- a/app/modules/epics/create-epic/create-epic.controller.spec.coffee +++ b/app/modules/epics/create-epic/create-epic.controller.spec.coffee @@ -32,11 +32,33 @@ describe "EpicRow", -> provide.value "tgResources", mocks.tgResources + _mockTgConfirm = () -> + mocks.tgConfirm = { + notify: sinon.stub() + } + provide.value "$tgConfirm", mocks.tgConfirm + + _mockTgAttachmentsService = () -> + mocks.tgAttachmentsService = { + upload: sinon.stub() + } + provide.value "tgAttachmentsService", mocks.tgAttachmentsService + + _mockQ = () -> + mocks.q = { + all: sinon.spy() + } + + provide.value "$q", mocks.q + + _mocks = () -> module ($provide) -> provide = $provide _mockTgResources() - + _mockTgConfirm() + _mockTgAttachmentsService() + _mockQ() return null beforeEach -> @@ -47,17 +69,65 @@ describe "EpicRow", -> inject ($controller) -> controller = $controller - it "create Epic", (done) -> - createEpicCtrl = controller "CreateEpicCtrl" - createEpicCtrl.project = { - id: 7 + it "create Epic with invalid form", () -> + data = { + project: {id: 1, default_epic_status: 1} + validateForm: sinon.stub() + setFormErrors: sinon.stub() + onCreateEpic: sinon.stub() } - createEpicCtrl.newEpic = { - project: createEpicCtrl.project.id + createEpicCtrl = controller "CreateEpicCtrl", null, data + createEpicCtrl.attachments = Immutable.List([{file: "file1"}, {file: "file2"}]) + + data.validateForm.withArgs().returns(false) + + createEpicCtrl.createEpic() + + expect(data.validateForm).have.been.called + expect(mocks.tgResources.epics.post).not.have.been.called + + it "create Epic successfully", (done) -> + data = { + project: {id: 1, default_epic_status: 1} + validateForm: sinon.stub() + setFormErrors: sinon.stub() + onCreateEpic: sinon.stub() } - createEpicCtrl.onReloadEpics = sinon.stub() - promise = mocks.tgResources.epics.post.withArgs(createEpicCtrl.newEpic).promise().resolve() + createEpicCtrl = controller "CreateEpicCtrl", null, data + createEpicCtrl.attachments = Immutable.List([{file: "file1"}, {file: "file2"}]) + + data.validateForm.withArgs().returns(true) + mocks.tgResources.epics.post.withArgs(createEpicCtrl.newEpic).promise().resolve( + {data: {id: 1, project: 1}} + ) createEpicCtrl.createEpic().then () -> - expect(createEpicCtrl.onReloadEpics).have.been.called + expect(data.validateForm).have.been.called + expect(mocks.tgAttachmentsService.upload).have.been.calledTwice + expect(createEpicCtrl.onCreateEpic).have.been.called done() + + # TODO: Talk with JuanFran. How to return a response with an object when a promise is rejected? + # reject_response = {data: {_error_message: "error"}} + # + # + #it "create Epic with an API error", (done) -> + # data = { + # project: {id: 1, default_epic_status: 1} + # validateForm: sinon.stub() + # setFormErrors: sinon.stub() + # onCreateEpic: sinon.stub() + # } + # createEpicCtrl = controller "CreateEpicCtrl", null, data + # createEpicCtrl.attachments = Immutable.List([{file: "file1"}, {file: "file2"}]) + + # data.validateForm.withArgs().returns(true) + # mocks.tgResources.epics.post.withArgs(createEpicCtrl.newEpic).promise().reject(new Error("error")) + + # createEpicCtrl.createEpic().then () -> + # expect(data.validateForm).have.been.called + # expect(mocks.tgAttachmentsService.upload).not.have.been.called + # expect(createEpicCtrl.onCreateEpic).not.have.been.called + # expect(data.setFormErrors).have.been.called + # expect(mocks.tgConfirm.notify).have.been.called + # done()