})

			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() {