github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/create_org_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/util/configv3" 12 13 "code.cloudfoundry.org/cli/command/commandfakes" 14 v7 "code.cloudfoundry.org/cli/command/v7" 15 "code.cloudfoundry.org/cli/command/v7/v7fakes" 16 "code.cloudfoundry.org/cli/util/ui" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("create-org Command", func() { 23 var ( 24 cmd v7.CreateOrgCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v7fakes.FakeCreateOrgActor 29 binaryName string 30 executeErr error 31 32 orgName string 33 ) 34 35 BeforeEach(func() { 36 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 37 fakeConfig = new(commandfakes.FakeConfig) 38 fakeSharedActor = new(commandfakes.FakeSharedActor) 39 fakeActor = new(v7fakes.FakeCreateOrgActor) 40 41 binaryName = "faceman" 42 fakeConfig.BinaryNameReturns(binaryName) 43 orgName = "some-org" 44 }) 45 46 JustBeforeEach(func() { 47 cmd = v7.CreateOrgCommand{ 48 UI: testUI, 49 Config: fakeConfig, 50 SharedActor: fakeSharedActor, 51 Actor: fakeActor, 52 RequiredArgs: flag.Organization{Organization: orgName}, 53 } 54 55 executeErr = cmd.Execute(nil) 56 }) 57 58 When("the environment is not set up correctly", func() { 59 BeforeEach(func() { 60 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 61 }) 62 63 It("returns an error", func() { 64 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 65 66 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 67 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 68 Expect(checkTargetedOrg).To(BeFalse()) 69 Expect(checkTargetedSpace).To(BeFalse()) 70 }) 71 }) 72 73 When("the environment is setup correctly", func() { 74 var currentUsername string 75 76 BeforeEach(func() { 77 currentUsername = "bob" 78 fakeConfig.CurrentUserReturns(configv3.User{Name: currentUsername}, nil) 79 }) 80 81 It("prints text indicating it is creating a org", func() { 82 Expect(executeErr).NotTo(HaveOccurred()) 83 Expect(testUI.Out).To(Say(`Creating org %s as %s\.\.\.`, orgName, currentUsername)) 84 }) 85 86 When("creating the org errors", func() { 87 BeforeEach(func() { 88 fakeActor.CreateOrganizationReturns(v7action.Organization{}, v7action.Warnings{"warnings-1", "warnings-2"}, errors.New("err-create-org")) 89 }) 90 91 It("returns an error and displays warnings", func() { 92 Expect(executeErr).To(MatchError("err-create-org")) 93 Expect(testUI.Err).To(Say("warnings-1")) 94 Expect(testUI.Err).To(Say("warnings-2")) 95 }) 96 }) 97 98 When("creating the org is successful", func() { 99 BeforeEach(func() { 100 fakeActor.CreateOrganizationReturns(v7action.Organization{Name: orgName, GUID: "some-org-guid"}, v7action.Warnings{"warnings-1", "warnings-2"}, nil) 101 }) 102 103 It("creates the org", func() { 104 Expect(fakeActor.CreateOrganizationCallCount()).To(Equal(1)) 105 expectedOrgName := fakeActor.CreateOrganizationArgsForCall(0) 106 Expect(expectedOrgName).To(Equal(orgName)) 107 }) 108 109 It("assigns org manager to the admin", func() { 110 Expect(testUI.Out).To(Say(`Assigning role OrgManager to user %s in org %s as %s\.\.\.`, currentUsername, orgName, currentUsername)) 111 Expect(fakeActor.CreateOrgRoleCallCount()).To(Equal(1)) 112 givenRoleType, givenOrgGuid, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateOrgRoleArgsForCall(0) 113 Expect(givenRoleType).To(Equal(constant.OrgManagerRole)) 114 Expect(givenOrgGuid).To(Equal("some-org-guid")) 115 Expect(givenUserName).To(Equal(currentUsername)) 116 Expect(givenOrigin).To(Equal("")) 117 Expect(givenIsClient).To(BeFalse()) 118 }) 119 120 It("prints all warnings, text indicating creation completion, ok and then a tip", func() { 121 Expect(executeErr).ToNot(HaveOccurred()) 122 Expect(testUI.Err).To(Say("warnings-1")) 123 Expect(testUI.Err).To(Say("warnings-2")) 124 Expect(testUI.Out).To(Say("OK")) 125 Expect(testUI.Out).To(Say(`TIP: Use 'cf target -o "%s"' to target new org`, orgName)) 126 }) 127 128 When("creating the org manager role errors", func() { 129 BeforeEach(func() { 130 fakeActor.CreateOrgRoleReturns( 131 v7action.Warnings{"role-create-warning-1"}, 132 errors.New("err-create-role")) 133 }) 134 135 It("returns an error and displays warnings", func() { 136 Expect(executeErr).To(MatchError("err-create-role")) 137 Expect(testUI.Err).To(Say("role-create-warning-1")) 138 }) 139 }) 140 }) 141 142 When("the org already exists", func() { 143 BeforeEach(func() { 144 fakeActor.CreateOrganizationReturns( 145 v7action.Organization{}, 146 v7action.Warnings{"some-warning"}, 147 ccerror.OrganizationNameTakenError{ 148 UnprocessableEntityError: ccerror.UnprocessableEntityError{ 149 Message: "Organization 'some-org' already exists.", 150 }, 151 }, 152 ) 153 }) 154 155 It("displays all warnings, that the org already exists, and does not error", func() { 156 Expect(executeErr).ToNot(HaveOccurred()) 157 158 Expect(testUI.Err).To(Say("some-warning")) 159 Expect(testUI.Out).To(Say(`Creating org %s as %s\.\.\.`, orgName, currentUsername)) 160 Expect(testUI.Out).To(Say(`Organization '%s' already exists\.`, orgName)) 161 Expect(testUI.Out).To(Say("OK")) 162 }) 163 }) 164 }) 165 })