github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/unset_org_role_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/v7action"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     6  	"code.cloudfoundry.org/cli/cf/errors"
     7  	"code.cloudfoundry.org/cli/command/flag"
     8  	"code.cloudfoundry.org/cli/command/translatableerror"
     9  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    10  	"code.cloudfoundry.org/cli/util/configv3"
    11  
    12  	"code.cloudfoundry.org/cli/command/commandfakes"
    13  	. "code.cloudfoundry.org/cli/command/v7"
    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("unset-org-role Command", func() {
    21  	var (
    22  		cmd             UnsetOrgRoleCommand
    23  		testUI          *ui.UI
    24  		fakeConfig      *commandfakes.FakeConfig
    25  		fakeSharedActor *commandfakes.FakeSharedActor
    26  		fakeActor       *v7fakes.FakeUnsetOrgRoleActor
    27  		binaryName      string
    28  		executeErr      error
    29  		input           *Buffer
    30  	)
    31  
    32  	BeforeEach(func() {
    33  		input = NewBuffer()
    34  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    35  		fakeConfig = new(commandfakes.FakeConfig)
    36  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    37  		fakeActor = new(v7fakes.FakeUnsetOrgRoleActor)
    38  
    39  		cmd = UnsetOrgRoleCommand{
    40  			UI:          testUI,
    41  			Config:      fakeConfig,
    42  			SharedActor: fakeSharedActor,
    43  			Actor:       fakeActor,
    44  		}
    45  
    46  		binaryName = "faceman"
    47  		fakeConfig.BinaryNameReturns(binaryName)
    48  	})
    49  
    50  	JustBeforeEach(func() {
    51  		executeErr = cmd.Execute(nil)
    52  	})
    53  
    54  	BeforeEach(func() {
    55  		fakeConfig.CurrentUserReturns(configv3.User{Name: "current-user"}, nil)
    56  
    57  		fakeActor.GetOrganizationByNameReturns(
    58  			v7action.Organization{
    59  				GUID:     "some-org-guid",
    60  				Name:     "some-org-name",
    61  				Metadata: nil,
    62  			},
    63  			v7action.Warnings{"get-org-warning"},
    64  			nil,
    65  		)
    66  
    67  		fakeActor.GetOrganizationByNameReturns(
    68  			v7action.Organization{GUID: "some-org-guid", Name: "some-org-name"},
    69  			v7action.Warnings{"get-org-warning"},
    70  			nil,
    71  		)
    72  	})
    73  
    74  	When("neither origin nor client flag is provided", func() {
    75  		BeforeEach(func() {
    76  			cmd.Args.Organization = "some-org-name"
    77  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
    78  			cmd.Args.Username = "target-user-name"
    79  		})
    80  
    81  		It("deletes the org role", func() {
    82  			Expect(fakeActor.DeleteOrgRoleCallCount()).To(Equal(1))
    83  			givenRoleType, givenOrgGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.DeleteOrgRoleArgsForCall(0)
    84  			Expect(givenRoleType).To(Equal(constant.OrgAuditorRole))
    85  			Expect(givenOrgGUID).To(Equal("some-org-guid"))
    86  			Expect(givenUserName).To(Equal("target-user-name"))
    87  			Expect(givenOrigin).To(Equal("uaa"))
    88  			Expect(givenIsClient).To(BeFalse())
    89  		})
    90  
    91  		It("displays flavor text and returns without error", func() {
    92  			Expect(testUI.Out).To(Say("Removing role OrgAuditor from user target-user-name in org some-org-name as current-user..."))
    93  			Expect(testUI.Out).To(Say("OK"))
    94  			Expect(executeErr).NotTo(HaveOccurred())
    95  		})
    96  	})
    97  
    98  	When("origin flag is provided", func() {
    99  		BeforeEach(func() {
   100  			cmd.Args.Organization = "some-org-name"
   101  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
   102  			cmd.Args.Username = "target-user-name"
   103  			cmd.Origin = "ldap"
   104  		})
   105  
   106  		It("deletes the org role", func() {
   107  			Expect(fakeActor.DeleteOrgRoleCallCount()).To(Equal(1))
   108  			givenRoleType, givenOrgGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.DeleteOrgRoleArgsForCall(0)
   109  			Expect(givenRoleType).To(Equal(constant.OrgAuditorRole))
   110  			Expect(givenOrgGUID).To(Equal("some-org-guid"))
   111  			Expect(givenUserName).To(Equal("target-user-name"))
   112  			Expect(givenOrigin).To(Equal("ldap"))
   113  			Expect(givenIsClient).To(BeFalse())
   114  		})
   115  
   116  		It("displays flavor text and returns without error", func() {
   117  			Expect(testUI.Out).To(Say("Removing role OrgAuditor from user target-user-name in org some-org-name as current-user..."))
   118  			Expect(testUI.Out).To(Say("OK"))
   119  			Expect(executeErr).NotTo(HaveOccurred())
   120  		})
   121  	})
   122  
   123  	When("client flag is provided", func() {
   124  		BeforeEach(func() {
   125  			cmd.Args.Organization = "some-org-name"
   126  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
   127  			cmd.Args.Username = "target-user-name"
   128  			cmd.IsClient = true
   129  		})
   130  
   131  		It("does not try to get the user", func() {
   132  			Expect(fakeActor.GetUserCallCount()).To(Equal(0))
   133  		})
   134  
   135  		It("deletes the org role correctly", func() {
   136  			givenRoleType, givenOrgGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.DeleteOrgRoleArgsForCall(0)
   137  			Expect(givenRoleType).To(Equal(constant.OrgAuditorRole))
   138  			Expect(givenOrgGUID).To(Equal("some-org-guid"))
   139  			Expect(givenUserName).To(Equal("target-user-name"))
   140  			Expect(givenOrigin).To(Equal("uaa"))
   141  			Expect(givenIsClient).To(BeTrue())
   142  		})
   143  
   144  		It("displays flavor text and returns without error", func() {
   145  			Expect(testUI.Out).To(Say("Removing role OrgAuditor from user target-user-name in org some-org-name as current-user..."))
   146  			Expect(testUI.Out).To(Say("OK"))
   147  			Expect(executeErr).NotTo(HaveOccurred())
   148  		})
   149  	})
   150  
   151  	When("both client and origin flags are provided", func() {
   152  		BeforeEach(func() {
   153  			cmd.Args.Organization = "some-org-name"
   154  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
   155  			cmd.Args.Username = "target-user-name"
   156  			cmd.Origin = "ldap"
   157  			cmd.IsClient = true
   158  		})
   159  
   160  		It("returns an error", func() {
   161  			Expect(executeErr).To(MatchError(translatableerror.ArgumentCombinationError{
   162  				Args: []string{"--client", "--origin"},
   163  			}))
   164  		})
   165  	})
   166  
   167  	When("the role does not exist", func() {
   168  		BeforeEach(func() {
   169  			cmd.Args.Organization = "some-org-name"
   170  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
   171  			cmd.Args.Username = "target-user-name"
   172  
   173  			fakeActor.DeleteOrgRoleReturns(
   174  				v7action.Warnings{"delete-role-warning"},
   175  				nil,
   176  			)
   177  		})
   178  
   179  		It("displays warnings and returns without error", func() {
   180  			Expect(testUI.Err).To(Say("delete-role-warning"))
   181  			Expect(testUI.Out).To(Say("OK"))
   182  			Expect(executeErr).NotTo(HaveOccurred())
   183  		})
   184  	})
   185  
   186  	When("invalid role arg is given", func() {
   187  		BeforeEach(func() {
   188  			cmd.Args.Role = flag.OrgRole{Role: "Astronaut"}
   189  		})
   190  
   191  		It("returns an error", func() {
   192  			Expect(executeErr).To(MatchError("Invalid role type."))
   193  		})
   194  	})
   195  
   196  	When("getting the org fails", func() {
   197  		BeforeEach(func() {
   198  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
   199  
   200  			fakeActor.GetOrganizationByNameReturns(
   201  				v7action.Organization{},
   202  				v7action.Warnings{"get-org-warning"},
   203  				errors.New("get-org-error"),
   204  			)
   205  		})
   206  
   207  		It("displays warnings and returns an error", func() {
   208  			Expect(testUI.Err).To(Say("get-org-warning"))
   209  			Expect(executeErr).To(MatchError("get-org-error"))
   210  		})
   211  	})
   212  
   213  	When("deleting the org role fails", func() {
   214  		BeforeEach(func() {
   215  			cmd.Args.Organization = "some-org-name"
   216  			cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"}
   217  			cmd.Args.Username = "target-user-name"
   218  
   219  			fakeActor.DeleteOrgRoleReturns(
   220  				v7action.Warnings{"delete-role-warning"},
   221  				errors.New("delete-role-error"),
   222  			)
   223  		})
   224  
   225  		It("displays warnings and returns an error", func() {
   226  			Expect(testUI.Err).To(Say("delete-role-warning"))
   227  			Expect(executeErr).To(MatchError("delete-role-error"))
   228  		})
   229  	})
   230  })