github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/client/yank_buildpack_test.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "testing" 6 7 "github.com/buildpacks/imgutil/fakes" 8 "github.com/heroku/color" 9 "github.com/sclevine/spec" 10 "github.com/sclevine/spec/report" 11 12 ifakes "github.com/buildpacks/pack/internal/fakes" 13 "github.com/buildpacks/pack/pkg/logging" 14 h "github.com/buildpacks/pack/testhelpers" 15 ) 16 17 func TestYankBuildpack(t *testing.T) { 18 color.Disable(true) 19 defer color.Disable(false) 20 spec.Run(t, "yank_buildpack", testYankBuildpack, spec.Parallel(), spec.Report(report.Terminal{})) 21 } 22 23 func testYankBuildpack(t *testing.T, when spec.G, it spec.S) { 24 when("#YankBuildpack", func() { 25 var ( 26 fakeImageFetcher *ifakes.FakeImageFetcher 27 fakeAppImage *fakes.Image 28 subject *Client 29 out bytes.Buffer 30 ) 31 32 it.Before(func() { 33 fakeImageFetcher = ifakes.NewFakeImageFetcher() 34 fakeAppImage = fakes.NewImage("buildpack/image", "", &fakeIdentifier{name: "buildpack-image"}) 35 36 h.AssertNil(t, fakeAppImage.SetLabel("io.buildpacks.buildpackage.metadata", 37 `{"id":"heroku/java-function","version":"1.1.1","stacks":[{"id":"heroku-18"},{"id":"io.buildpacks.stacks.jammy"},{"id":"org.cloudfoundry.stacks.cflinuxfs3"}]}`)) 38 fakeImageFetcher.RemoteImages["buildpack/image"] = fakeAppImage 39 40 fakeLogger := logging.NewLogWithWriters(&out, &out) 41 subject = &Client{ 42 logger: fakeLogger, 43 imageFetcher: fakeImageFetcher, 44 } 45 }) 46 47 it.After(func() { 48 _ = fakeAppImage.Cleanup() 49 }) 50 51 it("should return error for missing namespace id", func() { 52 err := subject.YankBuildpack(YankBuildpackOptions{ 53 ID: "hello", 54 }) 55 h.AssertError(t, err, "invalid id 'hello' does not contain a namespace") 56 }) 57 58 it("should return error for invalid id", func() { 59 err := subject.YankBuildpack(YankBuildpackOptions{ 60 ID: "bad/id/name", 61 }) 62 h.AssertError(t, err, "invalid id 'bad/id/name' contains unexpected characters") 63 }) 64 65 it("should return error when URL is missing", func() { 66 err := subject.YankBuildpack(YankBuildpackOptions{ 67 ID: "heroku/java", 68 Version: "0.2.1", 69 Type: "github", 70 URL: "", 71 }) 72 h.AssertError(t, err, "missing github URL") 73 }) 74 75 it("should return error when URL is invalid", func() { 76 err := subject.YankBuildpack(YankBuildpackOptions{ 77 ID: "heroku/java", 78 Version: "0.2.1", 79 Type: "github", 80 URL: "bad url", 81 }) 82 h.AssertNotNil(t, err) 83 h.AssertContains(t, err.Error(), "invalid URI for request") 84 }) 85 }) 86 }