github.com/YousefHaggyHeroku/pack@v1.5.5/internal/stack/mixins_test.go (about)

     1  package stack_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/stack"
    11  	h "github.com/YousefHaggyHeroku/pack/testhelpers"
    12  )
    13  
    14  func TestMixinValidation(t *testing.T) {
    15  	color.Disable(true)
    16  	defer color.Disable(false)
    17  	spec.Run(t, "testMixinValidation", testMixinValidation, spec.Parallel(), spec.Report(report.Terminal{}))
    18  }
    19  
    20  func testMixinValidation(t *testing.T, when spec.G, it spec.S) {
    21  	when("#ValidateMixins", func() {
    22  		it("ignores stage-specific mixins", func() {
    23  			buildMixins := []string{"mixinA", "build:mixinB"}
    24  			runMixins := []string{"mixinA", "run:mixinC"}
    25  
    26  			h.AssertNil(t, stack.ValidateMixins("some/build", buildMixins, "some/run", runMixins))
    27  		})
    28  
    29  		it("allows extraneous run image mixins", func() {
    30  			buildMixins := []string{"mixinA"}
    31  			runMixins := []string{"mixinA", "mixinB"}
    32  
    33  			h.AssertNil(t, stack.ValidateMixins("some/build", buildMixins, "some/run", runMixins))
    34  		})
    35  
    36  		it("returns an error with any missing run image mixins", func() {
    37  			buildMixins := []string{"mixinA", "mixinB"}
    38  			runMixins := []string{}
    39  
    40  			err := stack.ValidateMixins("some/build", buildMixins, "some/run", runMixins)
    41  
    42  			h.AssertError(t, err, "'some/run' missing required mixin(s): mixinA, mixinB")
    43  		})
    44  
    45  		it("returns an error with any invalid build image mixins", func() {
    46  			buildMixins := []string{"run:mixinA", "run:mixinB"}
    47  			runMixins := []string{}
    48  
    49  			err := stack.ValidateMixins("some/build", buildMixins, "some/run", runMixins)
    50  
    51  			h.AssertError(t, err, "'some/build' contains run-only mixin(s): run:mixinA, run:mixinB")
    52  		})
    53  
    54  		it("returns an error with any invalid run image mixins", func() {
    55  			buildMixins := []string{}
    56  			runMixins := []string{"build:mixinA", "build:mixinB"}
    57  
    58  			err := stack.ValidateMixins("some/build", buildMixins, "some/run", runMixins)
    59  
    60  			h.AssertError(t, err, "'some/run' contains build-only mixin(s): build:mixinA, build:mixinB")
    61  		})
    62  	})
    63  
    64  	when("#FindStageMixins", func() {
    65  		it("returns mixins with stage prefix", func() {
    66  			mixins := []string{"mixinA", "run:mixinB", "mixinC", "run:mixinD", "build:mixinE"}
    67  
    68  			runMixins := stack.FindStageMixins(mixins, "run")
    69  
    70  			h.AssertEq(t, runMixins, []string{"run:mixinB", "run:mixinD"})
    71  		})
    72  	})
    73  }