github.com/YousefHaggyHeroku/pack@v1.5.5/internal/dist/buildpack_descriptor_test.go (about)

     1  package dist_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/heroku/color"
     7  	"github.com/sclevine/spec"
     8  	"github.com/sclevine/spec/report"
     9  
    10  	"github.com/YousefHaggyHeroku/pack/internal/dist"
    11  	h "github.com/YousefHaggyHeroku/pack/testhelpers"
    12  )
    13  
    14  func TestBuildpackDescriptor(t *testing.T) {
    15  	color.Disable(true)
    16  	defer color.Disable(false)
    17  	spec.Run(t, "testBuildpackDescriptor", testBuildpackDescriptor, spec.Parallel(), spec.Report(report.Terminal{}))
    18  }
    19  
    20  func testBuildpackDescriptor(t *testing.T, when spec.G, it spec.S) {
    21  	when("#EnsureStackSupport", func() {
    22  		when("not validating against run image mixins", func() {
    23  			it("ignores run-only mixins", func() {
    24  				bp := dist.BuildpackDescriptor{
    25  					Info: dist.BuildpackInfo{
    26  						ID:      "some.buildpack.id",
    27  						Version: "some.buildpack.version",
    28  					},
    29  					Stacks: []dist.Stack{{
    30  						ID:     "some.stack.id",
    31  						Mixins: []string{"mixinA", "build:mixinB", "run:mixinD"},
    32  					}},
    33  				}
    34  
    35  				providedMixins := []string{"mixinA", "build:mixinB", "mixinC"}
    36  				h.AssertNil(t, bp.EnsureStackSupport("some.stack.id", providedMixins, false))
    37  			})
    38  
    39  			it("returns an error with any missing (and non-ignored) mixins", func() {
    40  				bp := dist.BuildpackDescriptor{
    41  					Info: dist.BuildpackInfo{
    42  						ID:      "some.buildpack.id",
    43  						Version: "some.buildpack.version",
    44  					},
    45  					Stacks: []dist.Stack{{
    46  						ID:     "some.stack.id",
    47  						Mixins: []string{"mixinX", "mixinY", "run:mixinZ"},
    48  					}},
    49  				}
    50  
    51  				providedMixins := []string{"mixinA", "mixinB"}
    52  				err := bp.EnsureStackSupport("some.stack.id", providedMixins, false)
    53  
    54  				h.AssertError(t, err, "buildpack 'some.buildpack.id@some.buildpack.version' requires missing mixin(s): mixinX, mixinY")
    55  			})
    56  		})
    57  
    58  		when("validating against run image mixins", func() {
    59  			it("requires run-only mixins", func() {
    60  				bp := dist.BuildpackDescriptor{
    61  					Info: dist.BuildpackInfo{
    62  						ID:      "some.buildpack.id",
    63  						Version: "some.buildpack.version",
    64  					},
    65  					Stacks: []dist.Stack{{
    66  						ID:     "some.stack.id",
    67  						Mixins: []string{"mixinA", "build:mixinB", "run:mixinD"},
    68  					}},
    69  				}
    70  
    71  				providedMixins := []string{"mixinA", "build:mixinB", "mixinC", "run:mixinD"}
    72  
    73  				h.AssertNil(t, bp.EnsureStackSupport("some.stack.id", providedMixins, true))
    74  			})
    75  
    76  			it("returns an error with any missing mixins", func() {
    77  				bp := dist.BuildpackDescriptor{
    78  					Info: dist.BuildpackInfo{
    79  						ID:      "some.buildpack.id",
    80  						Version: "some.buildpack.version",
    81  					},
    82  					Stacks: []dist.Stack{{
    83  						ID:     "some.stack.id",
    84  						Mixins: []string{"mixinX", "mixinY", "run:mixinZ"},
    85  					}},
    86  				}
    87  
    88  				providedMixins := []string{"mixinA", "mixinB"}
    89  
    90  				err := bp.EnsureStackSupport("some.stack.id", providedMixins, true)
    91  
    92  				h.AssertError(t, err, "buildpack 'some.buildpack.id@some.buildpack.version' requires missing mixin(s): mixinX, mixinY, run:mixinZ")
    93  			})
    94  		})
    95  
    96  		it("returns an error when buildpack does not support stack", func() {
    97  			bp := dist.BuildpackDescriptor{
    98  				Info: dist.BuildpackInfo{
    99  					ID:      "some.buildpack.id",
   100  					Version: "some.buildpack.version",
   101  				},
   102  				Stacks: []dist.Stack{{
   103  					ID:     "some.stack.id",
   104  					Mixins: []string{"mixinX", "mixinY"},
   105  				}},
   106  			}
   107  
   108  			err := bp.EnsureStackSupport("some.nonexistent.stack.id", []string{"mixinA"}, true)
   109  
   110  			h.AssertError(t, err, "buildpack 'some.buildpack.id@some.buildpack.version' does not support stack 'some.nonexistent.stack.id")
   111  		})
   112  
   113  		it("skips validating order buildpack", func() {
   114  			bp := dist.BuildpackDescriptor{
   115  				Info: dist.BuildpackInfo{
   116  					ID:      "some.buildpack.id",
   117  					Version: "some.buildpack.version",
   118  				},
   119  				Stacks: []dist.Stack{},
   120  			}
   121  
   122  			h.AssertNil(t, bp.EnsureStackSupport("some.stack.id", []string{"mixinA"}, true))
   123  		})
   124  	})
   125  }