var fakeArtifactSource *fakes.FakeArtifactSource BeforeEach(func() { fakeArtifactSource = new(fakes.FakeArtifactSource) repo.RegisterSource("some", fakeArtifactSource) }) Context("when the artifact source provides a proper file", func() { var streamedOut *gbytes.Buffer BeforeEach(func() { marshalled, err := yaml.Marshal(someConfig) Ω(err).ShouldNot(HaveOccurred()) streamedOut = gbytes.BufferWithBytes(marshalled) fakeArtifactSource.StreamFileReturns(streamedOut, nil) }) It("fetches the file via the correct path", func() { Ω(fakeArtifactSource.StreamFileArgsForCall(0)).Should(Equal("build.yml")) }) It("succeeds", func() { Ω(fetchErr).ShouldNot(HaveOccurred()) }) It("returns the unmarshalled config", func() { Ω(fetchedConfig).Should(Equal(someConfig)) }) It("closes the stream", func() {
path = "bogus" }) It("returns ErrFileNotFound", func() { Expect(streamErr).To(MatchError(FileNotFoundError{Path: "bogus"})) }) }) Context("from a path referring to a source", func() { var outStream io.ReadCloser BeforeEach(func() { path = "first-source/foo" outStream = gbytes.NewBuffer() firstSource.StreamFileReturns(outStream, nil) }) It("streams out from the source", func() { Expect(stream).To(Equal(outStream)) Expect(firstSource.StreamFileArgsForCall(0)).To(Equal("foo")) }) Context("when streaming out from the source fails", func() { disaster := errors.New("nope") BeforeEach(func() { firstSource.StreamFileReturns(nil, disaster) })