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  }