github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/commands/suggest_builders_test.go (about) 1 package commands_test 2 3 import ( 4 "bytes" 5 "errors" 6 "testing" 7 8 "github.com/golang/mock/gomock" 9 "github.com/heroku/color" 10 "github.com/sclevine/spec" 11 "github.com/sclevine/spec/report" 12 13 bldr "github.com/buildpacks/pack/internal/builder" 14 "github.com/buildpacks/pack/internal/commands" 15 "github.com/buildpacks/pack/internal/commands/testmocks" 16 "github.com/buildpacks/pack/pkg/client" 17 "github.com/buildpacks/pack/pkg/logging" 18 h "github.com/buildpacks/pack/testhelpers" 19 ) 20 21 func TestSuggestBuildersCommand(t *testing.T) { 22 color.Disable(true) 23 defer color.Disable(false) 24 spec.Run(t, "SuggestBuilderCommand", testSuggestBuildersCommand, spec.Parallel(), spec.Report(report.Terminal{})) 25 } 26 27 func testSuggestBuildersCommand(t *testing.T, when spec.G, it spec.S) { 28 var ( 29 logger logging.Logger 30 outBuf bytes.Buffer 31 mockController *gomock.Controller 32 mockClient *testmocks.MockPackClient 33 ) 34 35 it.Before(func() { 36 mockController = gomock.NewController(t) 37 mockClient = testmocks.NewMockPackClient(mockController) 38 logger = logging.NewLogWithWriters(&outBuf, &outBuf) 39 }) 40 41 when("#WriteSuggestedBuilder", func() { 42 when("description metadata exists", func() { 43 it.Before(func() { 44 mockClient.EXPECT().InspectBuilder("gcr.io/some/builder:latest", false).Return(&client.BuilderInfo{ 45 Description: "Remote description", 46 }, nil) 47 }) 48 49 it("displays descriptions from metadata", func() { 50 commands.WriteSuggestedBuilder(logger, mockClient, []bldr.KnownBuilder{{ 51 Vendor: "Builder", 52 Image: "gcr.io/some/builder:latest", 53 DefaultDescription: "Default description", 54 }}) 55 h.AssertContains(t, outBuf.String(), "Suggested builders:") 56 h.AssertContainsMatch(t, outBuf.String(), `Builder:\s+'gcr.io/some/builder:latest'\s+Remote description`) 57 }) 58 }) 59 60 when("description metadata does not exist", func() { 61 it.Before(func() { 62 mockClient.EXPECT().InspectBuilder(gomock.Any(), false).Return(&client.BuilderInfo{ 63 Description: "", 64 }, nil).AnyTimes() 65 }) 66 67 it("displays default descriptions", func() { 68 commands.WriteSuggestedBuilder(logger, mockClient, []bldr.KnownBuilder{{ 69 Vendor: "Builder", 70 Image: "gcr.io/some/builder:latest", 71 DefaultDescription: "Default description", 72 }}) 73 h.AssertContains(t, outBuf.String(), "Suggested builders:") 74 h.AssertContainsMatch(t, outBuf.String(), `Builder:\s+'gcr.io/some/builder:latest'\s+Default description`) 75 }) 76 }) 77 78 when("error inspecting images", func() { 79 it.Before(func() { 80 mockClient.EXPECT().InspectBuilder(gomock.Any(), false).Return(nil, errors.New("some error")).AnyTimes() 81 }) 82 83 it("displays default descriptions", func() { 84 commands.WriteSuggestedBuilder(logger, mockClient, []bldr.KnownBuilder{{ 85 Vendor: "Builder", 86 Image: "gcr.io/some/builder:latest", 87 DefaultDescription: "Default description", 88 }}) 89 h.AssertContains(t, outBuf.String(), "Suggested builders:") 90 h.AssertContainsMatch(t, outBuf.String(), `Builder:\s+'gcr.io/some/builder:latest'\s+Default description`) 91 }) 92 }) 93 }) 94 }