Example #1
0
			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)))
			})
		})
	})