github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/pkg/buildpack/build_module_info_test.go (about) 1 package buildpack_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/heroku/color" 8 "github.com/sclevine/spec" 9 "github.com/sclevine/spec/report" 10 11 "github.com/buildpacks/pack/pkg/buildpack" 12 h "github.com/buildpacks/pack/testhelpers" 13 ) 14 15 func TestBuildModuleInfo(t *testing.T) { 16 color.Disable(true) 17 defer color.Disable(false) 18 spec.Run(t, "BuildModuleInfo", testBuildModuleInfo, spec.Parallel(), spec.Report(report.Terminal{})) 19 } 20 21 func testBuildModuleInfo(t *testing.T, when spec.G, it spec.S) { 22 when("#ParseFlattenBuildModules", func() { 23 when("buildpacksID have format <buildpack>@<version>", func() { 24 var buildModules []string 25 when("one buildpackID is provided", func() { 26 it.Before(func() { 27 buildModules = []string{"some-buildpack@version-1"} 28 }) 29 30 it("parses successfully", func() { 31 flattenModuleInfos, err := buildpack.ParseFlattenBuildModules(buildModules) 32 h.AssertNil(t, err) 33 h.AssertNotNil(t, flattenModuleInfos) 34 h.AssertTrue(t, len(flattenModuleInfos.FlattenModules()) == 1) 35 h.AssertEq(t, flattenModuleInfos.FlattenModules()[0].BuildModule()[0].ID, "some-buildpack") 36 h.AssertEq(t, flattenModuleInfos.FlattenModules()[0].BuildModule()[0].Version, "version-1") 37 }) 38 }) 39 40 when("more than one buildpackID is provided", func() { 41 it.Before(func() { 42 buildModules = []string{"some-buildpack@version-1, another-buildpack@version-2"} 43 }) 44 45 it("parses multiple buildpackIDs", func() { 46 flattenModuleInfos, err := buildpack.ParseFlattenBuildModules(buildModules) 47 h.AssertNil(t, err) 48 h.AssertNotNil(t, flattenModuleInfos) 49 h.AssertTrue(t, len(flattenModuleInfos.FlattenModules()) == 1) 50 h.AssertTrue(t, len(flattenModuleInfos.FlattenModules()[0].BuildModule()) == 2) 51 h.AssertEq(t, flattenModuleInfos.FlattenModules()[0].BuildModule()[0].ID, "some-buildpack") 52 h.AssertEq(t, flattenModuleInfos.FlattenModules()[0].BuildModule()[0].Version, "version-1") 53 h.AssertEq(t, flattenModuleInfos.FlattenModules()[0].BuildModule()[1].ID, "another-buildpack") 54 h.AssertEq(t, flattenModuleInfos.FlattenModules()[0].BuildModule()[1].Version, "version-2") 55 }) 56 }) 57 }) 58 59 when("buildpacksID don't have format <buildpack>@<version>", func() { 60 when("@<version> is missing", func() { 61 it("errors with a descriptive message", func() { 62 _, err := buildpack.ParseFlattenBuildModules([]string{"some-buildpack"}) 63 h.AssertNotNil(t, err) 64 h.AssertError(t, err, fmt.Sprintf("invalid format %s; please use '<buildpack-id>@<buildpack-version>' to add buildpacks to be flattened", "some-buildpack")) 65 }) 66 }) 67 68 when("<version> is missing", func() { 69 it("errors with a descriptive message", func() { 70 _, err := buildpack.ParseFlattenBuildModules([]string{"some-buildpack@"}) 71 h.AssertNotNil(t, err) 72 h.AssertError(t, err, fmt.Sprintf("invalid format %s; '<buildpack-id>' and '<buildpack-version>' must be specified", "some-buildpack@")) 73 }) 74 }) 75 76 when("<buildpack> is missing", func() { 77 it("errors with a descriptive message", func() { 78 _, err := buildpack.ParseFlattenBuildModules([]string{"@version-1"}) 79 h.AssertNotNil(t, err) 80 h.AssertError(t, err, fmt.Sprintf("invalid format %s; '<buildpack-id>' and '<buildpack-version>' must be specified", "@version-1")) 81 }) 82 }) 83 84 when("multiple @ are used", func() { 85 it("errors with a descriptive message", func() { 86 _, err := buildpack.ParseFlattenBuildModules([]string{"some-buildpack@@version-1"}) 87 h.AssertNotNil(t, err) 88 h.AssertError(t, err, fmt.Sprintf("invalid format %s; please use '<buildpack-id>@<buildpack-version>' to add buildpacks to be flattened", "some-buildpack@@version-1")) 89 }) 90 }) 91 }) 92 }) 93 }