}
	})

	JustBeforeEach(func() {
		handler := handlers.NewCancelTaskHandler(logger, fakeBBSClient)
		handler.CancelTask(responseRecorder, request)
	})

	It("logs the incoming and outgoing request", func() {
		Eventually(logger.TestSink.Buffer).Should(gbytes.Say("serving"))
		Eventually(logger.TestSink.Buffer).Should(gbytes.Say("canceling-task"))
	})

	Context("when the task does not exist", func() {
		BeforeEach(func() {
			fakeBBSClient.CancelTaskReturns(models.ErrResourceNotFound)
		})

		It("responds with 404 Not Found", func() {
			Expect(responseRecorder.Code).To(Equal(http.StatusNotFound))
		})
	})

	Context("when the bbs responds with an unknown error", func() {
		BeforeEach(func() {
			fakeBBSClient.CancelTaskReturns(models.ErrUnknownError)
		})

		It("responds with 500 Internal Server Error", func() {
			Expect(responseRecorder.Code).To(Equal(http.StatusInternalServerError))
		})
	})

	Describe("Cancel", func() {
		BeforeEach(func() {
			var err error
			request, err = http.NewRequest("", "http://example.com?:task_guid=the-task-guid", nil)
			Expect(err).NotTo(HaveOccurred())
		})

		JustBeforeEach(func() {
			handler.Cancel(responseRecorder, request)
		})

		Context("when cancelling the task is successful", func() {
			BeforeEach(func() {
				fakeClient.CancelTaskReturns(nil)
			})

			It("responds with a 200", func() {
				Expect(fakeClient.CancelTaskCallCount()).To(Equal(1))
				Expect(fakeClient.CancelTaskArgsForCall(0)).To(Equal("the-task-guid"))

				Expect(responseRecorder.Code).To(Equal(http.StatusOK))
			})
		})

		Context("when the task cannot be found in the BBS", func() {
			BeforeEach(func() {
				fakeClient.CancelTaskReturns(models.ErrResourceNotFound)
			})