}) Context("when completion_callback_url is invalid", func() { BeforeEach(func() { validCreateRequest.CompletionCallbackURL = "ಠ_ಠ" }) It("errors", func() { Expect(responseRecorder.Code).To(Equal(http.StatusBadRequest)) }) }) }) Context("when the BBS responds with an error", func() { BeforeEach(func() { fakeClient.DesireTaskReturns(errors.New("ka-boom")) handler.Create(responseRecorder, newTestRequest(validCreateRequest)) }) It("calls DesireTask on the BBS with the correct task", func() { Expect(fakeClient.DesireTaskCallCount()).To(Equal(1)) taskGuid, _, _ := fakeClient.DesireTaskArgsForCall(0) Expect(taskGuid).To(Equal("task-guid-1")) }) It("responds with 500 INTERNAL ERROR", func() { Expect(responseRecorder.Code).To(Equal(http.StatusInternalServerError)) }) It("responds with a relevant error message", func() { expectedBody, _ := json.Marshal(receptor.Error{
It("creates a task on Diego", func() { Expect(fakeDiegoClient.DesireTaskCallCount()).To(Equal(1)) _, _, resultingTaskDef := fakeDiegoClient.DesireTaskArgsForCall(0) Expect(resultingTaskDef).To(Equal(fakeTaskDef)) }) Context("when creating the task succeeds", func() { It("does not send a staging failure response", func() { Expect(fakeCcClient.StagingCompleteCallCount()).To(Equal(0)) }) }) Context("when the task has already been created", func() { BeforeEach(func() { fakeDiegoClient.DesireTaskReturns(models.NewError(models.Error_ResourceExists, "ok, this task already exists")) }) It("does not log a failure", func() { Expect(logger).NotTo(gbytes.Say("staging-failed")) }) }) Context("create task fails for any other reason", func() { var desireError error BeforeEach(func() { desireError = errors.New("some task create error") fakeDiegoClient.DesireTaskReturns(desireError) })
It("returns a StatusBadRequest", func() { Expect(buildpackBuilder.BuildTaskCallCount()).To(Equal(1)) Expect(buildpackBuilder.BuildTaskArgsForCall(0)).To(Equal(&taskRequest)) Expect(responseRecorder.Code).To(Equal(http.StatusBadRequest)) }) It("does not send a request to bbs", func() { Expect(fakeBBSClient.DesireTaskCallCount()).To(Equal(0)) }) }) Context("when desiring the task fails", func() { Context("because of an unknown error", func() { BeforeEach(func() { fakeBBSClient.DesireTaskReturns(errors.New("boom!")) }) It("returns a StatusBadRequest", func() { Expect(fakeBBSClient.DesireTaskCallCount()).To(Equal(1)) Expect(responseRecorder.Code).To(Equal(http.StatusBadRequest)) }) }) }) Context("when the requested lifecycle does not have a corresponding builder", func() { BeforeEach(func() { taskRequest.Lifecycle = "something-else" }) It("responds with a 400 Bad Request", func() {