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 }