github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/commands/buildpack_register_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 TestRegisterCommand(t *testing.T) {
    22  	spec.Run(t, "RegisterCommand", testRegisterCommand, spec.Parallel(), spec.Report(report.Terminal{}))
    23  }
    24  
    25  func testRegisterCommand(t *testing.T, when spec.G, it spec.S) {
    26  	var (
    27  		cmd            *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  		cmd = commands.BuildpackRegister(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 := cmd.Execute()
    50  				h.AssertError(t, err, "accepts 1 arg")
    51  			})
    52  		})
    53  
    54  		when("image name is provided", func() {
    55  			var buildpackImage = "buildpack/image"
    56  
    57  			it("should work for required args", func() {
    58  				opts := client.RegisterBuildpackOptions{
    59  					ImageName: buildpackImage,
    60  					Type:      "github",
    61  					URL:       "https://github.com/buildpacks/registry-index",
    62  					Name:      "official",
    63  				}
    64  
    65  				mockClient.EXPECT().
    66  					RegisterBuildpack(gomock.Any(), opts).
    67  					Return(nil)
    68  
    69  				cmd.SetArgs([]string{buildpackImage})
    70  				h.AssertNil(t, cmd.Execute())
    71  			})
    72  
    73  			when("config.toml exists", func() {
    74  				it("should consume registry config values", func() {
    75  					cfg = config.Config{
    76  						DefaultRegistryName: "berneuse",
    77  						Registries: []config.Registry{
    78  							{
    79  								Name: "berneuse",
    80  								Type: "github",
    81  								URL:  "https://github.com/berneuse/buildpack-registry",
    82  							},
    83  						},
    84  					}
    85  					cmd = commands.BuildpackRegister(logger, cfg, mockClient)
    86  					opts := client.RegisterBuildpackOptions{
    87  						ImageName: buildpackImage,
    88  						Type:      "github",
    89  						URL:       "https://github.com/berneuse/buildpack-registry",
    90  						Name:      "berneuse",
    91  					}
    92  
    93  					mockClient.EXPECT().
    94  						RegisterBuildpack(gomock.Any(), opts).
    95  						Return(nil)
    96  
    97  					cmd.SetArgs([]string{buildpackImage})
    98  					h.AssertNil(t, cmd.Execute())
    99  				})
   100  
   101  				it("should handle config errors", func() {
   102  					cfg = config.Config{
   103  						DefaultRegistryName: "missing registry",
   104  					}
   105  					cmd = commands.BuildpackRegister(logger, cfg, mockClient)
   106  					cmd.SetArgs([]string{buildpackImage})
   107  
   108  					err := cmd.Execute()
   109  					h.AssertNotNil(t, err)
   110  				})
   111  			})
   112  
   113  			it("should support buildpack-registry flag", func() {
   114  				buildpackRegistry := "override"
   115  				cfg = config.Config{
   116  					DefaultRegistryName: "default",
   117  					Registries: []config.Registry{
   118  						{
   119  							Name: "default",
   120  							Type: "github",
   121  							URL:  "https://github.com/default/buildpack-registry",
   122  						},
   123  						{
   124  							Name: "override",
   125  							Type: "github",
   126  							URL:  "https://github.com/override/buildpack-registry",
   127  						},
   128  					},
   129  				}
   130  				opts := client.RegisterBuildpackOptions{
   131  					ImageName: buildpackImage,
   132  					Type:      "github",
   133  					URL:       "https://github.com/override/buildpack-registry",
   134  					Name:      "override",
   135  				}
   136  				mockClient.EXPECT().
   137  					RegisterBuildpack(gomock.Any(), opts).
   138  					Return(nil)
   139  
   140  				cmd = commands.BuildpackRegister(logger, cfg, mockClient)
   141  				cmd.SetArgs([]string{buildpackImage, "--buildpack-registry", buildpackRegistry})
   142  				h.AssertNil(t, cmd.Execute())
   143  			})
   144  		})
   145  	})
   146  }