var reader io.Reader var fakeWriteCloser *fake_io.FakeWriteCloser var wg *sync.WaitGroup BeforeEach(func() { reader = strings.NewReader("message") fakeWriteCloser = &fake_io.FakeWriteCloser{} wg = nil }) JustBeforeEach(func() { helpers.CopyAndClose(logger, wg, fakeWriteCloser, reader) }) It("copies from source to target", func() { Expect(fakeWriteCloser.WriteCallCount()).To(Equal(1)) Expect(string(fakeWriteCloser.WriteArgsForCall(0))).To(Equal("message")) }) It("closes the target when the copy is complete", func() { Expect(fakeWriteCloser.CloseCallCount()).To(Equal(1)) }) Context("when a wait group is provided", func() { BeforeEach(func() { wg = &sync.WaitGroup{} wg.Add(1) }) It("calls done before returning", func() { wg.Wait()