github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/actor/v7action/application_with_process_summary_test.go (about)

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