github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/commands/register_buildpack_test.go (about)

     1  package commands_test
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  
     7  	"github.com/buildpacks/pack/internal/commands"
     8  	"github.com/buildpacks/pack/pkg/client"
     9  
    10  	"github.com/golang/mock/gomock"
    11  	"github.com/sclevine/spec"
    12  	"github.com/sclevine/spec/report"
    13  	"github.com/spf13/cobra"
    14  
    15  	"github.com/buildpacks/pack/internal/commands/testmocks"
    16  	"github.com/buildpacks/pack/internal/config"
    17  	"github.com/buildpacks/pack/pkg/logging"
    18  	h "github.com/buildpacks/pack/testhelpers"
    19  )
    20  
    21  func TestRegisterBuildpackCommand(t *testing.T) {
    22  	spec.Run(t, "Commands", testRegisterBuildpackCommand, spec.Parallel(), spec.Report(report.Terminal{}))
    23  }
    24  
    25  func testRegisterBuildpackCommand(t *testing.T, when spec.G, it spec.S) {
    26  	var (
    27  		command        *cobra.Command
    28  		logger         logging.Logger
    29  		outBuf         bytes.Buffer
    30  		mockController *gomock.Controller
    31  		mockClient     *testmocks.MockPackClient
    32  		cfg            config.Config
    33  	)
    34  
    35  	it.Before(func() {
    36  		logger = logging.NewLogWithWriters(&outBuf, &outBuf)
    37  		mockController = gomock.NewController(t)
    38  		mockClient = testmocks.NewMockPackClient(mockController)
    39  		cfg = config.Config{}
    40  
    41  		command = commands.RegisterBuildpack(logger, cfg, mockClient)
    42  	})
    43  
    44  	it.After(func() {})
    45  
    46  	when("#RegisterBuildpackCommand", func() {
    47  		when("no image is provided", func() {
    48  			it("fails to run", func() {
    49  				err := command.Execute()
    50  				h.AssertError(t, err, "accepts 1 arg")
    51  			})
    52  		})
    53  
    54  		when("image name is provided", func() {
    55  			var (
    56  				buildpackImage string
    57  			)
    58  
    59  			it.Before(func() {
    60  				buildpackImage = "buildpack/image"
    61  			})
    62  
    63  			it("should work for required args", func() {
    64  				opts := client.RegisterBuildpackOptions{
    65  					ImageName: buildpackImage,
    66  					Type:      "github",
    67  					URL:       "https://github.com/buildpacks/registry-index",
    68  					Name:      "official",
    69  				}
    70  
    71  				mockClient.EXPECT().
    72  					RegisterBuildpack(gomock.Any(), opts).
    73  					Return(nil)
    74  
    75  				command.SetArgs([]string{buildpackImage})
    76  				h.AssertNil(t, command.Execute())
    77  			})
    78  
    79  			when("config.toml exists", func() {
    80  				it("should consume registry config values", func() {
    81  					cfg = config.Config{
    82  						DefaultRegistryName: "berneuse",
    83  						Registries: []config.Registry{
    84  							{
    85  								Name: "berneuse",
    86  								Type: "github",
    87  								URL:  "https://github.com/berneuse/buildpack-registry",
    88  							},
    89  						},
    90  					}
    91  					command = commands.RegisterBuildpack(logger, cfg, mockClient)
    92  					opts := client.RegisterBuildpackOptions{
    93  						ImageName: buildpackImage,
    94  						Type:      "github",
    95  						URL:       "https://github.com/berneuse/buildpack-registry",
    96  						Name:      "berneuse",
    97  					}
    98  
    99  					mockClient.EXPECT().
   100  						RegisterBuildpack(gomock.Any(), opts).
   101  						Return(nil)
   102  
   103  					command.SetArgs([]string{buildpackImage})
   104  					h.AssertNil(t, command.Execute())
   105  				})
   106  
   107  				it("should handle config errors", func() {
   108  					cfg = config.Config{
   109  						DefaultRegistryName: "missing registry",
   110  					}
   111  					command = commands.RegisterBuildpack(logger, cfg, mockClient)
   112  					command.SetArgs([]string{buildpackImage})
   113  
   114  					err := command.Execute()
   115  					h.AssertNotNil(t, err)
   116  				})
   117  			})
   118  
   119  			it("should support buildpack-registry flag", func() {
   120  				buildpackRegistry := "override"
   121  				cfg = config.Config{
   122  					DefaultRegistryName: "default",
   123  					Registries: []config.Registry{
   124  						{
   125  							Name: "default",
   126  							Type: "github",
   127  							URL:  "https://github.com/default/buildpack-registry",
   128  						},
   129  						{
   130  							Name: "override",
   131  							Type: "github",
   132  							URL:  "https://github.com/override/buildpack-registry",
   133  						},
   134  					},
   135  				}
   136  				opts := client.RegisterBuildpackOptions{
   137  					ImageName: buildpackImage,
   138  					Type:      "github",
   139  					URL:       "https://github.com/override/buildpack-registry",
   140  					Name:      "override",
   141  				}
   142  				mockClient.EXPECT().
   143  					RegisterBuildpack(gomock.Any(), opts).
   144  					Return(nil)
   145  
   146  				command = commands.RegisterBuildpack(logger, cfg, mockClient)
   147  				command.SetArgs([]string{buildpackImage, "--buildpack-registry", buildpackRegistry})
   148  				h.AssertNil(t, command.Execute())
   149  			})
   150  		})
   151  	})
   152  }