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  }