github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/remove_network_policy_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/actor/cfnetworkingaction"
     6  	"code.cloudfoundry.org/cli/actor/v7action"
     7  	"code.cloudfoundry.org/cli/command/commandfakes"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	"code.cloudfoundry.org/cli/command/translatableerror"
    10  	. "code.cloudfoundry.org/cli/command/v7"
    11  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    12  	"code.cloudfoundry.org/cli/resources"
    13  	"code.cloudfoundry.org/cli/util/configv3"
    14  	"code.cloudfoundry.org/cli/util/ui"
    15  	. "github.com/onsi/ginkgo"
    16  	. "github.com/onsi/gomega"
    17  	. "github.com/onsi/gomega/gbytes"
    18  )
    19  
    20  var _ = Describe("remove-network-policy Command", func() {
    21  	var (
    22  		cmd                    RemoveNetworkPolicyCommand
    23  		testUI                 *ui.UI
    24  		fakeConfig             *commandfakes.FakeConfig
    25  		fakeSharedActor        *commandfakes.FakeSharedActor
    26  		fakeNetworkPolicyActor *v7fakes.FakeRemoveNetworkPolicyActor
    27  		fakeActor              *v7fakes.FakeActor
    28  		binaryName             string
    29  		executeErr             error
    30  		srcApp                 string
    31  		destApp                string
    32  		protocol               string
    33  	)
    34  
    35  	BeforeEach(func() {
    36  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    37  		fakeConfig = new(commandfakes.FakeConfig)
    38  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    39  		fakeNetworkPolicyActor = new(v7fakes.FakeRemoveNetworkPolicyActor)
    40  		fakeActor = new(v7fakes.FakeActor)
    41  
    42  		srcApp = "some-app"
    43  		destApp = "some-other-app"
    44  		protocol = "tcp"
    45  
    46  		cmd = RemoveNetworkPolicyCommand{
    47  			BaseCommand: BaseCommand{
    48  				UI:          testUI,
    49  				Config:      fakeConfig,
    50  				SharedActor: fakeSharedActor,
    51  				Actor:       fakeActor,
    52  			},
    53  			NetworkingActor: fakeNetworkPolicyActor,
    54  			RequiredArgs: flag.RemoveNetworkPolicyArgsV7{
    55  				SourceApp: srcApp,
    56  				DestApp:   destApp,
    57  			},
    58  			Protocol: flag.NetworkProtocol{Protocol: protocol},
    59  			Port:     flag.NetworkPort{StartPort: 8080, EndPort: 8081},
    60  		}
    61  
    62  		binaryName = "faceman"
    63  		fakeConfig.BinaryNameReturns(binaryName)
    64  	})
    65  
    66  	JustBeforeEach(func() {
    67  		executeErr = cmd.Execute(nil)
    68  	})
    69  
    70  	When("checking target fails", func() {
    71  		BeforeEach(func() {
    72  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    73  		})
    74  
    75  		It("returns an error", func() {
    76  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    77  
    78  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    79  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    80  			Expect(checkTargetedOrg).To(BeTrue())
    81  			Expect(checkTargetedSpace).To(BeTrue())
    82  		})
    83  	})
    84  
    85  	When("the user is logged in", func() {
    86  		BeforeEach(func() {
    87  			fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil)
    88  			fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"})
    89  			fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"})
    90  		})
    91  
    92  		It("outputs flavor text", func() {
    93  			Expect(testUI.Out).To(Say(`Removing network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp))
    94  		})
    95  
    96  		When("the policy deletion is successful", func() {
    97  			BeforeEach(func() {
    98  				fakeNetworkPolicyActor.RemoveNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, nil)
    99  			})
   100  
   101  			It("displays OK", func() {
   102  				Expect(executeErr).ToNot(HaveOccurred())
   103  				Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0))
   104  				Expect(fakeActor.GetSpaceByNameAndOrganizationCallCount()).To(Equal(0))
   105  				Expect(fakeNetworkPolicyActor.RemoveNetworkPolicyCallCount()).To(Equal(1))
   106  				passedSrcSpaceGuid, passedSrcAppName, passedDestSpaceGuid, passedDestAppName, passedProtocol, passedStartPort, passedEndPort := fakeNetworkPolicyActor.RemoveNetworkPolicyArgsForCall(0)
   107  				Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   108  				Expect(passedSrcAppName).To(Equal("some-app"))
   109  				Expect(passedDestSpaceGuid).To(Equal("some-space-guid"))
   110  				Expect(passedDestAppName).To(Equal("some-other-app"))
   111  				Expect(passedProtocol).To(Equal("tcp"))
   112  				Expect(passedStartPort).To(Equal(8080))
   113  				Expect(passedEndPort).To(Equal(8081))
   114  
   115  				Expect(testUI.Out).To(Say(`Removing network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp))
   116  				Expect(testUI.Err).To(Say("some-warning-1"))
   117  				Expect(testUI.Err).To(Say("some-warning-2"))
   118  				Expect(testUI.Out).To(Say("OK"))
   119  			})
   120  		})
   121  
   122  		When("when a valid org and space is provided", func() {
   123  			BeforeEach(func() {
   124  				cmd.DestinationOrg = "dest-org"
   125  				cmd.DestinationSpace = "dest-space"
   126  				fakeActor.GetOrganizationByNameReturns(resources.Organization{GUID: "some-org-guid"}, v7action.Warnings{"some-warning-1"}, nil)
   127  				fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{GUID: "some-dest-guid"}, v7action.Warnings{"some-warning-2"}, nil)
   128  			})
   129  
   130  			It("displays OK", func() {
   131  				Expect(executeErr).ToNot(HaveOccurred())
   132  				Expect(fakeNetworkPolicyActor.RemoveNetworkPolicyCallCount()).To(Equal(1))
   133  				passedSrcSpaceGuid, passedSrcAppName, passedDestSpaceGuid, passedDestAppName, passedProtocol, passedStartPort, passedEndPort := fakeNetworkPolicyActor.RemoveNetworkPolicyArgsForCall(0)
   134  				Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   135  				Expect(passedSrcAppName).To(Equal("some-app"))
   136  				Expect(passedDestSpaceGuid).To(Equal("some-dest-guid"))
   137  				Expect(passedDestAppName).To(Equal("some-other-app"))
   138  				Expect(passedProtocol).To(Equal("tcp"))
   139  				Expect(passedStartPort).To(Equal(8080))
   140  				Expect(passedEndPort).To(Equal(8081))
   141  
   142  				Expect(testUI.Out).To(Say(`Removing network policy from app %s in org some-org / space some-space to app %s in org dest-org / space dest-space as some-user\.\.\.`, srcApp, destApp))
   143  				Expect(testUI.Err).To(Say("some-warning-1"))
   144  				Expect(testUI.Err).To(Say("some-warning-2"))
   145  				Expect(testUI.Out).To(Say("OK"))
   146  			})
   147  		})
   148  
   149  		When("a destination space but no destination org is specified", func() {
   150  			BeforeEach(func() {
   151  				cmd.DestinationSpace = "dest-space"
   152  				fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{GUID: "some-dest-guid"}, v7action.Warnings{}, nil)
   153  			})
   154  
   155  			It("displays OK when no error occurs", func() {
   156  				Expect(executeErr).ToNot(HaveOccurred())
   157  				Expect(fakeNetworkPolicyActor.RemoveNetworkPolicyCallCount()).To(Equal(1))
   158  				Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0))
   159  				passedSrcSpaceGuid, passedSrcAppName, passedDestSpaceGuid, passedDestAppName, passedProtocol, passedStartPort, passedEndPort := fakeNetworkPolicyActor.RemoveNetworkPolicyArgsForCall(0)
   160  				Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   161  				Expect(passedSrcAppName).To(Equal("some-app"))
   162  				Expect(passedDestSpaceGuid).To(Equal("some-dest-guid"))
   163  				Expect(passedDestAppName).To(Equal("some-other-app"))
   164  				Expect(passedProtocol).To(Equal("tcp"))
   165  				Expect(passedStartPort).To(Equal(8080))
   166  				Expect(passedEndPort).To(Equal(8081))
   167  
   168  				Expect(testUI.Out).To(Say(`Removing network policy from app %s in org some-org / space some-space to app %s in org some-org / space dest-space as some-user\.\.\.`, srcApp, destApp))
   169  				Expect(testUI.Out).To(Say("OK"))
   170  			})
   171  		})
   172  
   173  		When("a destination org is provided without a destination space", func() {
   174  			BeforeEach(func() {
   175  				cmd.DestinationOrg = "coolorg"
   176  			})
   177  
   178  			It("responds with an error", func() {
   179  				Expect(executeErr).To(MatchError(translatableerror.NetworkPolicyDestinationOrgWithoutSpaceError{}))
   180  			})
   181  		})
   182  
   183  		When("an invalid org is provided", func() {
   184  			BeforeEach(func() {
   185  				cmd.DestinationOrg = "coolorg"
   186  				cmd.DestinationSpace = "coolspace"
   187  				warnings := v7action.Warnings{"some-org-warning-1", "some-org-warning-2"}
   188  				fakeActor.GetOrganizationByNameReturns(resources.Organization{}, warnings, actionerror.OrganizationNotFoundError{Name: "coolorg"})
   189  			})
   190  
   191  			It("responds with an error", func() {
   192  				passedOrgName := fakeActor.GetOrganizationByNameArgsForCall(0)
   193  				Expect(passedOrgName).To(Equal("coolorg"))
   194  				Expect(executeErr).To(MatchError(actionerror.OrganizationNotFoundError{Name: "coolorg"}))
   195  			})
   196  
   197  			It("prints the warnings", func() {
   198  				Expect(testUI.Err).To(Say("some-org-warning-1"))
   199  				Expect(testUI.Err).To(Say("some-org-warning-2"))
   200  			})
   201  		})
   202  
   203  		When("an invalid space is provided", func() {
   204  			BeforeEach(func() {
   205  				cmd.DestinationOrg = "coolorg"
   206  				cmd.DestinationSpace = "coolspace"
   207  				warnings := v7action.Warnings{"some-space-warning-1", "some-space-warning-2"}
   208  				fakeActor.GetOrganizationByNameReturns(resources.Organization{GUID: "some-org-guid"}, v7action.Warnings{}, nil)
   209  				fakeActor.GetSpaceByNameAndOrganizationReturns(resources.Space{}, warnings, actionerror.SpaceNotFoundError{Name: "coolspace"})
   210  			})
   211  
   212  			It("responds with an error", func() {
   213  				passedSpaceName, passedOrgGUID := fakeActor.GetSpaceByNameAndOrganizationArgsForCall(0)
   214  				Expect(passedSpaceName).To(Equal("coolspace"))
   215  				Expect(passedOrgGUID).To(Equal("some-org-guid"))
   216  				Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: "coolspace"}))
   217  			})
   218  
   219  			It("prints the warnings", func() {
   220  				Expect(testUI.Err).To(Say("some-space-warning-1"))
   221  				Expect(testUI.Err).To(Say("some-space-warning-2"))
   222  			})
   223  		})
   224  
   225  		When("the policy does not exist", func() {
   226  			BeforeEach(func() {
   227  				fakeNetworkPolicyActor.RemoveNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, actionerror.PolicyDoesNotExistError{})
   228  			})
   229  
   230  			It("displays OK", func() {
   231  				Expect(executeErr).ToNot(HaveOccurred())
   232  				Expect(fakeNetworkPolicyActor.RemoveNetworkPolicyCallCount()).To(Equal(1))
   233  				passedSrcSpaceGuid, passedSrcAppName, passedDestSpaceGuid, passedDestAppName, passedProtocol, passedStartPort, passedEndPort := fakeNetworkPolicyActor.RemoveNetworkPolicyArgsForCall(0)
   234  				Expect(passedSrcSpaceGuid).To(Equal("some-space-guid"))
   235  				Expect(passedSrcAppName).To(Equal("some-app"))
   236  				Expect(passedDestSpaceGuid).To(Equal("some-space-guid"))
   237  				Expect(passedDestAppName).To(Equal("some-other-app"))
   238  				Expect(passedProtocol).To(Equal("tcp"))
   239  				Expect(passedStartPort).To(Equal(8080))
   240  				Expect(passedEndPort).To(Equal(8081))
   241  
   242  				Expect(testUI.Out).To(Say(`Removing network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp))
   243  				Expect(testUI.Err).To(Say("some-warning-1"))
   244  				Expect(testUI.Err).To(Say("some-warning-2"))
   245  				Expect(testUI.Out).To(Say("Policy does not exist."))
   246  				Expect(testUI.Out).To(Say("OK"))
   247  			})
   248  		})
   249  
   250  		When("the policy deletion is not successful", func() {
   251  			BeforeEach(func() {
   252  				fakeNetworkPolicyActor.RemoveNetworkPolicyReturns(cfnetworkingaction.Warnings{"some-warning-1", "some-warning-2"}, actionerror.ApplicationNotFoundError{Name: srcApp})
   253  			})
   254  
   255  			It("does not display OK", func() {
   256  				Expect(executeErr).To(MatchError(actionerror.ApplicationNotFoundError{Name: srcApp}))
   257  
   258  				Expect(testUI.Out).To(Say(`Removing network policy from app %s to app %s in org some-org / space some-space as some-user\.\.\.`, srcApp, destApp))
   259  				Expect(testUI.Err).To(Say("some-warning-1"))
   260  				Expect(testUI.Err).To(Say("some-warning-2"))
   261  				Expect(testUI.Out).ToNot(Say("OK"))
   262  			})
   263  		})
   264  	})
   265  })