}) It("does not abort the real build", func() { Ω(realBuild.AbortCallCount()).Should(BeZero()) }) It("releases the lock", func() { Ω(fakeLock.ReleaseCallCount()).Should(Equal(1)) }) }) Context("when aborting the real build fails", func() { disaster := errors.New("oh no!") BeforeEach(func() { realBuild.AbortReturns(disaster) }) It("returns the error", func() { Ω(abortErr).Should(Equal(disaster)) }) It("releases the lock", func() { Ω(fakeLock.ReleaseCallCount()).Should(Equal(1)) }) }) }) Context("when looking up the engine build fails", func() { disaster := errors.New("nope")
Context("when the engine returns a build", func() { var fakeBuild *enginefakes.FakeBuild BeforeEach(func() { fakeBuild = new(enginefakes.FakeBuild) fakeEngine.LookupBuildReturns(fakeBuild, nil) }) It("aborts the build", func() { Expect(fakeBuild.AbortCallCount()).To(Equal(1)) }) Context("when aborting succeeds", func() { BeforeEach(func() { fakeBuild.AbortReturns(nil) }) It("returns 204", func() { Expect(response.StatusCode).To(Equal(http.StatusNoContent)) }) }) Context("when aborting fails", func() { BeforeEach(func() { fakeBuild.AbortReturns(errors.New("oh no!")) }) It("returns 500", func() { Expect(response.StatusCode).To(Equal(http.StatusInternalServerError)) })