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 }