github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/pushaction/application_test.go (about)

     1  package pushaction_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "code.cloudfoundry.org/cli/actor/pushaction"
     7  	"code.cloudfoundry.org/cli/actor/pushaction/pushactionfakes"
     8  	"code.cloudfoundry.org/cli/actor/v2action"
     9  
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Applications", func() {
    15  	var (
    16  		actor       *Actor
    17  		fakeV2Actor *pushactionfakes.FakeV2Actor
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		fakeV2Actor = new(pushactionfakes.FakeV2Actor)
    22  		actor = NewActor(fakeV2Actor)
    23  	})
    24  
    25  	Describe("CreateOrUpdateApp", func() {
    26  		var (
    27  			config ApplicationConfig
    28  
    29  			returnedConfig ApplicationConfig
    30  			event          Event
    31  			warnings       Warnings
    32  			executeErr     error
    33  		)
    34  
    35  		BeforeEach(func() {
    36  			config = ApplicationConfig{
    37  				DesiredApplication: v2action.Application{
    38  					Name:      "some-app-name",
    39  					SpaceGUID: "some-space-guid",
    40  				},
    41  				Path: "some-path",
    42  			}
    43  		})
    44  
    45  		JustBeforeEach(func() {
    46  			returnedConfig, event, warnings, executeErr = actor.CreateOrUpdateApp(config)
    47  		})
    48  
    49  		Context("when the app exists", func() {
    50  			BeforeEach(func() {
    51  				config.CurrentApplication = v2action.Application{
    52  					Name:      "some-app-name",
    53  					GUID:      "some-app-guid",
    54  					SpaceGUID: "some-space-guid",
    55  					Buildpack: "java",
    56  				}
    57  				config.DesiredApplication = v2action.Application{
    58  					Name:      "some-app-name",
    59  					GUID:      "some-app-guid",
    60  					SpaceGUID: "some-space-guid",
    61  					Buildpack: "ruby",
    62  				}
    63  			})
    64  
    65  			Context("when the update is successful", func() {
    66  				BeforeEach(func() {
    67  					fakeV2Actor.UpdateApplicationReturns(v2action.Application{
    68  						Name:      "some-app-name",
    69  						GUID:      "some-app-guid",
    70  						SpaceGUID: "some-space-guid",
    71  						Buildpack: "ruby",
    72  					}, v2action.Warnings{"update-warning"}, nil)
    73  				})
    74  
    75  				It("updates the application", func() {
    76  					Expect(executeErr).ToNot(HaveOccurred())
    77  					Expect(warnings).To(ConsistOf("update-warning"))
    78  					Expect(event).To(Equal(UpdatedApplication))
    79  
    80  					Expect(returnedConfig.DesiredApplication).To(Equal(v2action.Application{
    81  						Name:      "some-app-name",
    82  						GUID:      "some-app-guid",
    83  						SpaceGUID: "some-space-guid",
    84  						Buildpack: "ruby",
    85  					}))
    86  					Expect(returnedConfig.CurrentApplication).To(Equal(returnedConfig.DesiredApplication))
    87  
    88  					Expect(fakeV2Actor.UpdateApplicationCallCount()).To(Equal(1))
    89  					Expect(fakeV2Actor.UpdateApplicationArgsForCall(0)).To(Equal(v2action.Application{
    90  						Name:      "some-app-name",
    91  						GUID:      "some-app-guid",
    92  						SpaceGUID: "some-space-guid",
    93  						Buildpack: "ruby",
    94  					}))
    95  
    96  				})
    97  			})
    98  
    99  			Context("when the update errors", func() {
   100  				var expectedErr error
   101  				BeforeEach(func() {
   102  					expectedErr = errors.New("oh my")
   103  					fakeV2Actor.UpdateApplicationReturns(v2action.Application{}, v2action.Warnings{"update-warning"}, expectedErr)
   104  				})
   105  
   106  				It("returns warnings and error and stops", func() {
   107  					Expect(executeErr).To(MatchError(expectedErr))
   108  					Expect(warnings).To(ConsistOf("update-warning"))
   109  				})
   110  			})
   111  		})
   112  
   113  		Context("when the app does not exist", func() {
   114  			Context("when the creation is successful", func() {
   115  				BeforeEach(func() {
   116  					fakeV2Actor.CreateApplicationReturns(v2action.Application{
   117  						Name:      "some-app-name",
   118  						GUID:      "some-app-guid",
   119  						SpaceGUID: "some-space-guid",
   120  						Buildpack: "ruby",
   121  					}, v2action.Warnings{"create-warning"}, nil)
   122  				})
   123  
   124  				It("creates the application", func() {
   125  					Expect(executeErr).ToNot(HaveOccurred())
   126  					Expect(warnings).To(ConsistOf("create-warning"))
   127  					Expect(event).To(Equal(CreatedApplication))
   128  
   129  					Expect(returnedConfig.DesiredApplication).To(Equal(v2action.Application{
   130  						Name:      "some-app-name",
   131  						GUID:      "some-app-guid",
   132  						SpaceGUID: "some-space-guid",
   133  						Buildpack: "ruby",
   134  					}))
   135  					Expect(returnedConfig.CurrentApplication).To(Equal(returnedConfig.DesiredApplication))
   136  
   137  					Expect(fakeV2Actor.CreateApplicationCallCount()).To(Equal(1))
   138  					Expect(fakeV2Actor.CreateApplicationArgsForCall(0)).To(Equal(v2action.Application{
   139  						Name:      "some-app-name",
   140  						SpaceGUID: "some-space-guid",
   141  					}))
   142  				})
   143  			})
   144  
   145  			Context("when the creation errors", func() {
   146  				var expectedErr error
   147  
   148  				BeforeEach(func() {
   149  					expectedErr = errors.New("oh my")
   150  					fakeV2Actor.CreateApplicationReturns(v2action.Application{}, v2action.Warnings{"create-warning"}, expectedErr)
   151  				})
   152  
   153  				It("sends the warnings and errors and returns true", func() {
   154  					Expect(executeErr).To(MatchError(expectedErr))
   155  					Expect(warnings).To(ConsistOf("create-warning"))
   156  				})
   157  			})
   158  		})
   159  	})
   160  })