github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/create_space_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/ccv3/constant" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 "code.cloudfoundry.org/cli/command/flag" 11 v7 "code.cloudfoundry.org/cli/command/v7" 12 "code.cloudfoundry.org/cli/command/v7/v7fakes" 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("create-space Command", func() { 21 var ( 22 cmd v7.CreateSpaceCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeActor *v7fakes.FakeCreateSpaceActor 27 binaryName string 28 executeErr error 29 30 spaceName string 31 orgName string 32 userName 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.FakeCreateSpaceActor) 40 41 binaryName = "faceman" 42 fakeConfig.BinaryNameReturns(binaryName) 43 spaceName = "some-space" 44 orgName = "" 45 userName = "some-user-name" 46 }) 47 48 JustBeforeEach(func() { 49 cmd = v7.CreateSpaceCommand{ 50 UI: testUI, 51 Config: fakeConfig, 52 SharedActor: fakeSharedActor, 53 Actor: fakeActor, 54 RequiredArgs: flag.Space{Space: spaceName}, 55 Organization: orgName, 56 } 57 58 executeErr = cmd.Execute(nil) 59 }) 60 61 When("the environment is not set up correctly", func() { 62 BeforeEach(func() { 63 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 64 }) 65 66 It("returns an error", func() { 67 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 68 69 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 70 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 71 Expect(checkTargetedOrg).To(BeFalse()) 72 Expect(checkTargetedSpace).To(BeFalse()) 73 }) 74 }) 75 76 When("the environment is setup correctly", func() { 77 BeforeEach(func() { 78 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 79 Name: "some-org-name", 80 GUID: "some-org-guid", 81 }) 82 fakeConfig.CurrentUserReturns(configv3.User{ 83 Name: userName, 84 Origin: "some-user-origin", 85 }, nil) 86 }) 87 88 It("prints text indicating it is creating a space", func() { 89 Expect(executeErr).NotTo(HaveOccurred()) 90 Expect(testUI.Out).To(Say(`Creating space %s in org %s as %s\.\.\.`, spaceName, "some-org-name", userName)) 91 }) 92 93 When("creating the space errors", func() { 94 BeforeEach(func() { 95 fakeActor.CreateSpaceReturns( 96 v7action.Space{}, 97 v7action.Warnings{"warnings-1", "warnings-2"}, 98 errors.New("err-create-space"), 99 ) 100 }) 101 102 It("returns an error and displays warnings", func() { 103 Expect(executeErr).To(MatchError("err-create-space")) 104 Expect(testUI.Err).To(Say("warnings-1")) 105 Expect(testUI.Err).To(Say("warnings-2")) 106 }) 107 }) 108 109 When("creating the space and setting roles is successful", func() { 110 BeforeEach(func() { 111 fakeActor.CreateSpaceReturns( 112 v7action.Space{GUID: "some-space-guid"}, 113 v7action.Warnings{"warnings-1", "warnings-2"}, 114 nil, 115 ) 116 117 fakeActor.CreateSpaceRoleReturnsOnCall(0, 118 v7action.Warnings{"create-space-manager-role-warning"}, 119 nil, 120 ) 121 122 fakeActor.CreateSpaceRoleReturnsOnCall(1, 123 v7action.Warnings{"create-space-developer-role-warning"}, 124 nil, 125 ) 126 }) 127 128 It("creates the space in the targeted organization", func() { 129 Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(0)) 130 Expect(fakeActor.CreateSpaceCallCount()).To(Equal(1)) 131 expectedSpaceName, expectedOrgGUID := fakeActor.CreateSpaceArgsForCall(0) 132 Expect(expectedSpaceName).To(Equal(spaceName)) 133 Expect(expectedOrgGUID).To(Equal("some-org-guid")) 134 }) 135 136 It("sets the user as a space manager", func() { 137 Expect(fakeActor.CreateSpaceRoleCallCount()).To(Equal(2)) 138 givenRoleType, givenOrgGuid, givenSpaceGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateSpaceRoleArgsForCall(0) 139 Expect(givenRoleType).To(Equal(constant.SpaceManagerRole)) 140 Expect(givenOrgGuid).To(Equal("some-org-guid")) 141 Expect(givenSpaceGUID).To(Equal("some-space-guid")) 142 Expect(givenUserName).To(Equal("some-user-name")) 143 Expect(givenOrigin).To(Equal("some-user-origin")) 144 Expect(givenIsClient).To(BeFalse()) 145 }) 146 147 It("sets the user as a space developer", func() { 148 Expect(fakeActor.CreateSpaceRoleCallCount()).To(Equal(2)) 149 givenRoleType, givenOrgGuid, givenSpaceGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateSpaceRoleArgsForCall(1) 150 Expect(givenRoleType).To(Equal(constant.SpaceDeveloperRole)) 151 Expect(givenOrgGuid).To(Equal("some-org-guid")) 152 Expect(givenSpaceGUID).To(Equal("some-space-guid")) 153 Expect(givenUserName).To(Equal("some-user-name")) 154 Expect(givenOrigin).To(Equal("some-user-origin")) 155 Expect(givenIsClient).To(BeFalse()) 156 }) 157 158 It("prints all warnings, text indicating creation completion, ok and then a tip", func() { 159 Expect(executeErr).ToNot(HaveOccurred()) 160 Expect(testUI.Err).To(Say("warnings-1")) 161 Expect(testUI.Err).To(Say("warnings-2")) 162 Expect(testUI.Err).To(Say("create-space-manager-role-warning")) 163 Expect(testUI.Err).To(Say("create-space-developer-role-warning")) 164 165 Expect(testUI.Out).To(Say("Creating space some-space in org some-org-name as some-user-name...")) 166 Expect(testUI.Out).To(Say("OK")) 167 168 Expect(testUI.Out).To(Say("Assigning role SpaceManager to user some-user-name in org some-org-name / space some-space as some-user-name...")) 169 Expect(testUI.Out).To(Say("OK")) 170 171 Expect(testUI.Out).To(Say("Assigning role SpaceDeveloper to user some-user-name in org some-org-name / space some-space as some-user-name...")) 172 Expect(testUI.Out).To(Say("OK")) 173 174 Expect(testUI.Out).To(Say(`TIP: Use 'cf target -o "%s" -s "%s"' to target new space`, "some-org-name", spaceName)) 175 }) 176 }) 177 178 When("passing in a organization", func() { 179 When("the organization exists", func() { 180 BeforeEach(func() { 181 fakeActor.CreateSpaceReturns(v7action.Space{}, v7action.Warnings{"warnings-1", "warnings-2"}, nil) 182 orgName = "some-other-org" 183 fakeActor.GetOrganizationByNameReturns( 184 v7action.Organization{Name: "some-other-org", GUID: "some-other-org-guid"}, 185 v7action.Warnings{"get-org-warnings"}, 186 nil, 187 ) 188 }) 189 190 It("prints all warnings, ok and then a tip", func() { 191 Expect(executeErr).ToNot(HaveOccurred()) 192 Expect(testUI.Err).To(Say("get-org-warnings")) 193 Expect(testUI.Err).To(Say("warnings-1")) 194 Expect(testUI.Err).To(Say("warnings-2")) 195 Expect(testUI.Out).To(Say("OK")) 196 Expect(testUI.Out).To(Say(`TIP: Use 'cf target -o "%s" -s "%s"' to target new space`, orgName, spaceName)) 197 }) 198 199 It("creates the space", func() { 200 Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1)) 201 expectedOrgName := fakeActor.GetOrganizationByNameArgsForCall(0) 202 Expect(expectedOrgName).To(Equal(orgName)) 203 204 Expect(fakeActor.CreateSpaceCallCount()).To(Equal(1)) 205 expectedSpaceName, expectedOrgGUID := fakeActor.CreateSpaceArgsForCall(0) 206 Expect(expectedSpaceName).To(Equal(spaceName)) 207 Expect(expectedOrgGUID).To(Equal("some-other-org-guid")) 208 }) 209 }) 210 When("the organization doesn't exist", func() { 211 BeforeEach(func() { 212 orgName = "some-other-org" 213 fakeActor.GetOrganizationByNameReturns( 214 v7action.Organization{}, 215 v7action.Warnings{"get-org-warnings"}, 216 errors.New("get-organization-error"), 217 ) 218 }) 219 220 It("prints all warnings, ok and then a tip", func() { 221 Expect(executeErr).To(MatchError(errors.New("get-organization-error"))) 222 }) 223 224 It(" does not create the space", func() { 225 Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1)) 226 expectedOrgName := fakeActor.GetOrganizationByNameArgsForCall(0) 227 Expect(expectedOrgName).To(Equal(orgName)) 228 229 Expect(fakeActor.CreateSpaceCallCount()).To(Equal(0)) 230 }) 231 }) 232 }) 233 234 When("the space already exists", func() { 235 BeforeEach(func() { 236 fakeActor.CreateSpaceReturns(v7action.Space{}, v7action.Warnings{"some-warning"}, actionerror.SpaceAlreadyExistsError{Space: spaceName}) 237 }) 238 239 It("displays all warnings, that the space already exists, and does not error", func() { 240 Expect(executeErr).ToNot(HaveOccurred()) 241 242 Expect(testUI.Err).To(Say("some-warning")) 243 Expect(testUI.Out).To(Say(`Creating space %s in org %s as %s\.\.\.`, spaceName, "some-org-name", userName)) 244 Expect(testUI.Out).To(Say(`Space '%s' already exists\.`, spaceName)) 245 Expect(testUI.Out).To(Say("OK")) 246 }) 247 }) 248 249 When("setting the space manager role fails", func() { 250 BeforeEach(func() { 251 fakeActor.CreateSpaceRoleReturnsOnCall(0, 252 v7action.Warnings{"create-space-manager-role-warning"}, 253 errors.New("create-space-manager-role-error"), 254 ) 255 }) 256 257 It("displays warnings and returns the error", func() { 258 Expect(testUI.Err).To(Say("create-space-manager-role-warning")) 259 Expect(executeErr).To(MatchError("create-space-manager-role-error")) 260 }) 261 }) 262 263 When("setting the space developer role fails", func() { 264 BeforeEach(func() { 265 fakeActor.CreateSpaceRoleReturnsOnCall(1, 266 v7action.Warnings{"create-space-developer-role-warning"}, 267 errors.New("create-space-developer-role-error"), 268 ) 269 }) 270 271 It("displays warnings and returns the error", func() { 272 Expect(testUI.Err).To(Say("create-space-developer-role-warning")) 273 Expect(executeErr).To(MatchError("create-space-developer-role-error")) 274 }) 275 }) 276 }) 277 })