github.com/cloudfoundry/cli@v7.1.0+incompatible/actor/v3action/application_with_process_summary_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "code.cloudfoundry.org/cli/actor/v3action"
     7  	"code.cloudfoundry.org/cli/actor/v3action/v3actionfakes"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
    10  	"code.cloudfoundry.org/cli/resources"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Application with ProcessSummary Actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
    25  	})
    26  
    27  	Describe("GetApplicationsWithProcessesBySpace", func() {
    28  		When("there are apps", func() {
    29  			BeforeEach(func() {
    30  				fakeCloudControllerClient.GetApplicationsReturns(
    31  					[]resources.Application{
    32  						{
    33  							Name:  "some-app-name-1",
    34  							GUID:  "some-app-guid-1",
    35  							State: constant.ApplicationStarted,
    36  						},
    37  						{
    38  							Name:  "some-app-name-2",
    39  							GUID:  "some-app-guid-2",
    40  							State: constant.ApplicationStopped,
    41  						},
    42  					},
    43  					ccv3.Warnings{"some-warning"},
    44  					nil,
    45  				)
    46  
    47  				fakeCloudControllerClient.GetApplicationProcessesReturnsOnCall(
    48  					0,
    49  					[]ccv3.Process{
    50  						{
    51  							GUID: "some-process-guid-1",
    52  							Type: "some-process-type-1",
    53  						},
    54  						{
    55  							GUID: "some-process-guid-2",
    56  							Type: "some-process-type-2",
    57  						},
    58  					},
    59  					ccv3.Warnings{"some-process-warning-1"},
    60  					nil,
    61  				)
    62  				fakeCloudControllerClient.GetApplicationProcessesReturnsOnCall(
    63  					1,
    64  					[]ccv3.Process{
    65  						{
    66  							GUID: "some-process-guid-3",
    67  							Type: "some-process-type-3",
    68  						},
    69  					},
    70  					ccv3.Warnings{"some-process-warning-2"},
    71  					nil,
    72  				)
    73  
    74  				fakeCloudControllerClient.GetProcessInstancesReturnsOnCall(
    75  					0,
    76  					[]ccv3.ProcessInstance{{State: constant.ProcessInstanceRunning}, {State: constant.ProcessInstanceDown}, {State: constant.ProcessInstanceRunning}},
    77  					ccv3.Warnings{"some-process-stats-warning-1"},
    78  					nil,
    79  				)
    80  				fakeCloudControllerClient.GetProcessInstancesReturnsOnCall(
    81  					1,
    82  					[]ccv3.ProcessInstance{{State: constant.ProcessInstanceRunning}, {State: constant.ProcessInstanceRunning}},
    83  					ccv3.Warnings{"some-process-stats-warning-2"},
    84  					nil,
    85  				)
    86  				fakeCloudControllerClient.GetProcessInstancesReturnsOnCall(
    87  					2,
    88  					[]ccv3.ProcessInstance{{State: constant.ProcessInstanceDown}},
    89  					ccv3.Warnings{"some-process-stats-warning-3"},
    90  					nil,
    91  				)
    92  			})
    93  
    94  			It("returns app summaries and warnings", func() {
    95  				summaries, warnings, err := actor.GetApplicationsWithProcessesBySpace("some-space-guid")
    96  				Expect(err).ToNot(HaveOccurred())
    97  				Expect(summaries).To(ConsistOf(
    98  					ApplicationWithProcessSummary{
    99  						Application: Application{
   100  							Name:  "some-app-name-1",
   101  							GUID:  "some-app-guid-1",
   102  							State: constant.ApplicationStarted,
   103  						},
   104  						ProcessSummaries: []ProcessSummary{
   105  							{
   106  								Process:         Process{GUID: "some-process-guid-1", Type: "some-process-type-1"},
   107  								InstanceDetails: []ProcessInstance{{State: constant.ProcessInstanceRunning}, {State: constant.ProcessInstanceDown}, {State: constant.ProcessInstanceRunning}},
   108  							},
   109  							{
   110  								Process:         Process{GUID: "some-process-guid-2", Type: "some-process-type-2"},
   111  								InstanceDetails: []ProcessInstance{{State: constant.ProcessInstanceRunning}, {State: constant.ProcessInstanceRunning}},
   112  							},
   113  						},
   114  					},
   115  					ApplicationWithProcessSummary{
   116  						Application: Application{
   117  							Name:  "some-app-name-2",
   118  							GUID:  "some-app-guid-2",
   119  							State: constant.ApplicationStopped,
   120  						},
   121  						ProcessSummaries: []ProcessSummary{
   122  							{
   123  								Process:         Process{GUID: "some-process-guid-3", Type: "some-process-type-3"},
   124  								InstanceDetails: []ProcessInstance{{State: constant.ProcessInstanceDown}},
   125  							},
   126  						},
   127  					}))
   128  				Expect(warnings).To(ConsistOf("some-warning", "some-process-warning-1", "some-process-stats-warning-1", "some-process-stats-warning-2", "some-process-warning-2", "some-process-stats-warning-3"))
   129  
   130  				Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   131  				Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   132  					ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"some-space-guid"}},
   133  					ccv3.Query{Key: ccv3.OrderBy, Values: []string{ccv3.NameOrder}},
   134  				))
   135  
   136  				Expect(fakeCloudControllerClient.GetApplicationProcessesCallCount()).To(Equal(2))
   137  				Expect(fakeCloudControllerClient.GetApplicationProcessesArgsForCall(0)).To(Equal("some-app-guid-1"))
   138  				Expect(fakeCloudControllerClient.GetApplicationProcessesArgsForCall(1)).To(Equal("some-app-guid-2"))
   139  
   140  				Expect(fakeCloudControllerClient.GetProcessInstancesCallCount()).To(Equal(3))
   141  				Expect(fakeCloudControllerClient.GetProcessInstancesArgsForCall(0)).To(Equal("some-process-guid-1"))
   142  				Expect(fakeCloudControllerClient.GetProcessInstancesArgsForCall(1)).To(Equal("some-process-guid-2"))
   143  				Expect(fakeCloudControllerClient.GetProcessInstancesArgsForCall(2)).To(Equal("some-process-guid-3"))
   144  			})
   145  		})
   146  
   147  		When("getting the app processes returns an error", func() {
   148  			var expectedErr error
   149  
   150  			BeforeEach(func() {
   151  				fakeCloudControllerClient.GetApplicationsReturns(
   152  					[]resources.Application{
   153  						{
   154  							Name:  "some-app-name",
   155  							GUID:  "some-app-guid",
   156  							State: constant.ApplicationStarted,
   157  						},
   158  					},
   159  					ccv3.Warnings{"some-warning"},
   160  					nil,
   161  				)
   162  
   163  				expectedErr = errors.New("some error")
   164  				fakeCloudControllerClient.GetApplicationProcessesReturns(
   165  					[]ccv3.Process{},
   166  					ccv3.Warnings{"some-process-warning"},
   167  					expectedErr,
   168  				)
   169  			})
   170  
   171  			It("returns the error", func() {
   172  				_, warnings, err := actor.GetApplicationsWithProcessesBySpace("some-space-guid")
   173  				Expect(err).To(Equal(expectedErr))
   174  				Expect(warnings).To(ConsistOf("some-warning", "some-process-warning"))
   175  			})
   176  		})
   177  
   178  		When("getting the app process instances returns an error", func() {
   179  			var expectedErr error
   180  
   181  			BeforeEach(func() {
   182  				fakeCloudControllerClient.GetApplicationsReturns(
   183  					[]resources.Application{
   184  						{
   185  							Name:  "some-app-name",
   186  							GUID:  "some-app-guid",
   187  							State: constant.ApplicationStarted,
   188  						},
   189  					},
   190  					ccv3.Warnings{"some-warning"},
   191  					nil,
   192  				)
   193  
   194  				fakeCloudControllerClient.GetApplicationProcessesReturns(
   195  					[]ccv3.Process{
   196  						{
   197  							GUID: "some-process-guid",
   198  							Type: "some-type",
   199  						},
   200  					},
   201  					ccv3.Warnings{"some-process-warning"},
   202  					nil,
   203  				)
   204  
   205  				expectedErr = errors.New("some error")
   206  				fakeCloudControllerClient.GetProcessInstancesReturns(
   207  					[]ccv3.ProcessInstance{},
   208  					ccv3.Warnings{"some-process-stats-warning"},
   209  					expectedErr,
   210  				)
   211  			})
   212  
   213  			It("returns the error", func() {
   214  				_, warnings, err := actor.GetApplicationsWithProcessesBySpace("some-space-guid")
   215  				Expect(err).To(Equal(expectedErr))
   216  				Expect(warnings).To(ConsistOf("some-warning", "some-process-warning", "some-process-stats-warning"))
   217  			})
   218  		})
   219  	})
   220  })