configRefresher *requirementsfakes.FakeConfigRefresher ) BeforeEach(func() { underlyingRequirement = new(requirementsfakes.FakeRequirement) configRefresher = new(requirementsfakes.FakeConfigRefresher) r = NewConfigRefreshingRequirement(underlyingRequirement, configRefresher) }) Describe("Execute", func() { It("tries to execute the underlying requirement", func() { underlyingRequirement.ExecuteReturns(nil) r.Execute() Expect(underlyingRequirement.ExecuteCallCount()).To(Equal(1)) Expect(configRefresher.RefreshCallCount()).To(Equal(0)) }) Context("when the underlying requirement fails", func() { It("refreshes the config", func() { underlyingRequirement.ExecuteReturns(errors.New("TERRIBLE THINGS")) r.Execute() Expect(configRefresher.RefreshCallCount()).To(Equal(1)) }) It("returns the value of calling execute on the underlying requirement again", func() { var count int disaster := errors.New("TERRIBLE THINGS")
r1.ExecuteReturns(nil) r2 := new(requirementsfakes.FakeRequirement) r2.ExecuteReturns(nil) // SETUP requirements := Requirements{ r1, r2, } // EXECUTE err := requirements.Execute() // ASSERT Expect(err).NotTo(HaveOccurred()) Expect(r1.ExecuteCallCount()).To(Equal(1)) Expect(r2.ExecuteCallCount()).To(Equal(1)) }) It("returns the first error that occurs", func() { disaster := errors.New("OH NO") otherDisaster := errors.New("WHAT!") r1 := new(requirementsfakes.FakeRequirement) r1.ExecuteReturns(disaster) r2 := new(requirementsfakes.FakeRequirement) r2.ExecuteReturns(otherDisaster) // SETUP requirements := Requirements{ r1,