github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/util/railway/railway_test.go (about) 1 package railway_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 7 "code.cloudfoundry.org/cli/util/railway" 8 . "github.com/onsi/ginkgo" 9 . "github.com/onsi/gomega" 10 ) 11 12 var _ = Describe("Sequentially()", func() { 13 Describe("with no errors", func() { 14 It("calls all the tracks", func() { 15 var ( 16 i = 0 17 j = 0 18 ) 19 20 _, _ = railway.Sequentially( 21 func() (ccv3.Warnings, error) { i = 1; return ccv3.Warnings{}, nil }, 22 func() (ccv3.Warnings, error) { j = 2; return ccv3.Warnings{}, nil }, 23 ) 24 25 Expect(i).To(Equal(1)) 26 Expect(j).To(Equal(2)) 27 }) 28 29 It("calls the tracks in order", func() { 30 i := 0 31 32 _, _ = railway.Sequentially( 33 func() (ccv3.Warnings, error) { i = 1; return ccv3.Warnings{}, nil }, 34 func() (ccv3.Warnings, error) { i = 2; return ccv3.Warnings{}, nil }, 35 ) 36 37 Expect(i).To(Equal(2)) 38 }) 39 }) 40 41 Describe("with errors", func() { 42 It("returns the first error", func() { 43 _, err := railway.Sequentially( 44 func() (ccv3.Warnings, error) { return ccv3.Warnings{}, errors.New("error 1") }, 45 func() (ccv3.Warnings, error) { return ccv3.Warnings{}, errors.New("error 2") }, 46 ) 47 48 Expect(err).To(Equal(errors.New("error 1"))) 49 }) 50 51 It("runs all tracks before the error", func() { 52 i := 0 53 54 _, err := railway.Sequentially( 55 func() (ccv3.Warnings, error) { i = 1; return ccv3.Warnings{}, nil }, 56 func() (ccv3.Warnings, error) { return ccv3.Warnings{}, errors.New("error 1") }, 57 ) 58 59 Expect(err).To(Equal(errors.New("error 1"))) 60 Expect(i).To(Equal(1)) 61 }) 62 }) 63 64 Describe("with warnings", func() { 65 It("returns empty warnings when nothing runs", func() { 66 Expect(railway.Sequentially()).To(BeEmpty()) 67 }) 68 69 It("returns combines warnings on successes", func() { 70 warnings, _ := railway.Sequentially( 71 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 1"}, nil }, 72 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 2"}, nil }, 73 ) 74 75 Expect(warnings).To(ConsistOf("warning 1", "warning 2")) 76 }) 77 78 It("returns warnings that happened before an error", func() { 79 warnings, _ := railway.Sequentially( 80 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 1"}, nil }, 81 func() (ccv3.Warnings, error) { return ccv3.Warnings{}, errors.New("error 1") }, 82 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 3"}, nil }, 83 ) 84 85 Expect(warnings).To(ConsistOf("warning 1")) 86 }) 87 88 It("includes warnings from the failed track", func() { 89 warnings, _ := railway.Sequentially( 90 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 1"}, nil }, 91 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 2"}, errors.New("error 1") }, 92 func() (ccv3.Warnings, error) { return ccv3.Warnings{"warning 3"}, nil }, 93 ) 94 95 Expect(warnings).To(ConsistOf("warning 1", "warning 2")) 96 }) 97 }) 98 })