code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v7pushaction/handle_buildpacks_override_test.go (about)

     1  package v7pushaction_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/command/translatableerror"
     5  	"code.cloudfoundry.org/cli/util/manifestparser"
     6  
     7  	. "code.cloudfoundry.org/cli/actor/v7pushaction"
     8  
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  )
    12  
    13  var _ = Describe("HandleBuildpacksOverride", func() {
    14  	var (
    15  		originalManifest    manifestparser.Manifest
    16  		transformedManifest manifestparser.Manifest
    17  		overrides           FlagOverrides
    18  		executeErr          error
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		originalManifest = manifestparser.Manifest{}
    23  		overrides = FlagOverrides{}
    24  	})
    25  
    26  	JustBeforeEach(func() {
    27  		transformedManifest, executeErr = HandleBuildpacksOverride(originalManifest, overrides)
    28  	})
    29  
    30  	When("buildpacks flag is set", func() {
    31  		When("there is a single app in the manifest with a buildpacks specified", func() {
    32  			BeforeEach(func() {
    33  				overrides.Buildpacks = []string{"buildpack-1", "buildpack-2"}
    34  
    35  				originalManifest.Applications = []manifestparser.Application{
    36  					{
    37  						RemainingManifestFields: map[string]interface{}{"buildpacks": []string{"buildpack-3"}},
    38  					},
    39  				}
    40  			})
    41  
    42  			It("will override the buildpacks in the manifest with the provided flag value", func() {
    43  				Expect(executeErr).To(Not(HaveOccurred()))
    44  				Expect(transformedManifest.Applications).To(ConsistOf(
    45  					manifestparser.Application{
    46  						RemainingManifestFields: map[string]interface{}{"buildpacks": []string{"buildpack-1", "buildpack-2"}},
    47  					},
    48  				))
    49  			})
    50  		})
    51  
    52  		When("there is a single app with --buildpack default override specified", func() {
    53  			BeforeEach(func() {
    54  				overrides.Buildpacks = []string{"default"}
    55  
    56  				originalManifest.Applications = []manifestparser.Application{
    57  					{
    58  						RemainingManifestFields: map[string]interface{}{"buildpacks": []string{"buildpack-3"}},
    59  					},
    60  				}
    61  			})
    62  
    63  			It("sets the buildpacks list in the manifest to be an empty array", func() {
    64  				Expect(executeErr).To(Not(HaveOccurred()))
    65  				Expect(transformedManifest.Applications).To(ConsistOf(
    66  					manifestparser.Application{
    67  						RemainingManifestFields: map[string]interface{}{"buildpacks": []string{}},
    68  					},
    69  				))
    70  			})
    71  		})
    72  
    73  		When("there is a single app with --buildpack null override specified", func() {
    74  			BeforeEach(func() {
    75  				overrides.Buildpacks = []string{"null"}
    76  
    77  				originalManifest.Applications = []manifestparser.Application{
    78  					{
    79  						RemainingManifestFields: map[string]interface{}{"buildpacks": []string{"buildpack-3"}},
    80  					},
    81  				}
    82  			})
    83  
    84  			It("sets the buildpacks list in the manifest to be an empty array", func() {
    85  				Expect(executeErr).To(Not(HaveOccurred()))
    86  				Expect(transformedManifest.Applications).To(ConsistOf(
    87  					manifestparser.Application{
    88  						RemainingManifestFields: map[string]interface{}{"buildpacks": []string{}},
    89  					},
    90  				))
    91  			})
    92  		})
    93  
    94  		When("there are multiple apps in the manifest", func() {
    95  			BeforeEach(func() {
    96  				overrides.Buildpacks = []string{"buildpack-1", "buildpack-2"}
    97  
    98  				originalManifest.Applications = []manifestparser.Application{
    99  					{},
   100  					{},
   101  				}
   102  			})
   103  
   104  			It("returns an error", func() {
   105  				Expect(executeErr).To(MatchError(translatableerror.CommandLineArgsWithMultipleAppsError{}))
   106  			})
   107  		})
   108  
   109  		When("when docker is set in the manifest", func() {
   110  			BeforeEach(func() {
   111  				overrides.Buildpacks = []string{"buildpack-1", "buildpack-2"}
   112  
   113  				originalManifest.Applications = []manifestparser.Application{
   114  					{
   115  						Name: "some-app",
   116  						Docker: &manifestparser.Docker{
   117  							Image: "nginx:latest",
   118  						},
   119  					},
   120  				}
   121  			})
   122  
   123  			It("returns an error", func() {
   124  				Expect(executeErr).To(MatchError(translatableerror.ArgumentManifestMismatchError{
   125  					Arg:              "--buildpack, -b",
   126  					ManifestProperty: "docker",
   127  				}))
   128  			})
   129  		})
   130  	})
   131  })