fakeDiegoClient.TaskByGuidReturns(stagingTask, nil) }) JustBeforeEach(func() { req, err := http.NewRequest("POST", "/v1/staging/a-staging-guid", nil) Expect(err).NotTo(HaveOccurred()) req.Form = url.Values{":staging_guid": {"a-staging-guid"}} handler.StopStaging(responseRecorder, req) }) Context("when receiving a stop staging request", func() { It("retrieves the current staging task by guid", func() { Expect(fakeDiegoClient.TaskByGuidCallCount()).To(Equal(1)) _, task := fakeDiegoClient.TaskByGuidArgsForCall(0) Expect(task).To(Equal("a-staging-guid")) }) Context("when an in-flight staging task is not found", func() { BeforeEach(func() { fakeDiegoClient.TaskByGuidReturns(&models.Task{}, models.ErrResourceNotFound) }) It("returns StatusNotFound", func() { Expect(responseRecorder.Code).To(Equal(http.StatusNotFound)) }) }) Context("when retrieving the current task fails", func() { BeforeEach(func() {
fakeDiegoClient.TaskByGuidReturns(stagingTask, nil) }) JustBeforeEach(func() { req, err := http.NewRequest("POST", "/v1/staging/a-staging-guid", nil) Expect(err).NotTo(HaveOccurred()) req.Form = url.Values{":staging_guid": {"a-staging-guid"}} handler.StopStaging(responseRecorder, req) }) Context("when receiving a stop staging request", func() { It("retrieves the current staging task by guid", func() { Expect(fakeDiegoClient.TaskByGuidCallCount()).To(Equal(1)) Expect(fakeDiegoClient.TaskByGuidArgsForCall(0)).To(Equal("a-staging-guid")) }) Context("when an in-flight staging task is not found", func() { BeforeEach(func() { fakeDiegoClient.TaskByGuidReturns(&models.Task{}, models.ErrResourceNotFound) }) It("returns StatusNotFound", func() { Expect(responseRecorder.Code).To(Equal(http.StatusNotFound)) }) }) Context("when retrieving the current task fails", func() { BeforeEach(func() { fakeDiegoClient.TaskByGuidReturns(&models.Task{}, errors.New("boom"))
It("responds with an error", func() { Expect(responseRecorder.Code).To(Equal(http.StatusInternalServerError)) }) }) Context("when the task is successfully found in the BBS", func() { var task *models.Task BeforeEach(func() { task = model_helpers.NewValidTask("the-task-guid") task.State = models.Task_Running fakeClient.TaskByGuidReturns(task, nil) }) It("retrieves the task by the given guid", func() { guid := fakeClient.TaskByGuidArgsForCall(0) Expect(guid).To(Equal(task.TaskGuid)) }) It("gets the task", func() { Expect(responseRecorder.Code).To(Equal(http.StatusOK)) var actualTask receptor.TaskResponse err := json.Unmarshal(responseRecorder.Body.Bytes(), &actualTask) Expect(err).NotTo(HaveOccurred()) Expect(actualTask).To(Equal(serialization.TaskToResponse(task))) }) }) })