github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/user/space_users_test.go (about) 1 package user_test 2 3 import ( 4 testapi "github.com/cloudfoundry/cli/cf/api/fakes" 5 "github.com/cloudfoundry/cli/cf/command_registry" 6 "github.com/cloudfoundry/cli/cf/configuration/core_config" 7 "github.com/cloudfoundry/cli/cf/models" 8 "github.com/cloudfoundry/cli/plugin/models" 9 testcmd "github.com/cloudfoundry/cli/testhelpers/commands" 10 testconfig "github.com/cloudfoundry/cli/testhelpers/configuration" 11 testreq "github.com/cloudfoundry/cli/testhelpers/requirements" 12 testterm "github.com/cloudfoundry/cli/testhelpers/terminal" 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 16 . "github.com/cloudfoundry/cli/testhelpers/matchers" 17 ) 18 19 var _ = Describe("space-users command", func() { 20 var ( 21 ui *testterm.FakeUI 22 requirementsFactory *testreq.FakeReqFactory 23 spaceRepo *testapi.FakeSpaceRepository 24 userRepo *testapi.FakeUserRepository 25 configRepo core_config.Repository 26 deps command_registry.Dependency 27 ) 28 29 updateCommandDependency := func(pluginCall bool) { 30 deps.Ui = ui 31 deps.Config = configRepo 32 deps.RepoLocator = deps.RepoLocator.SetUserRepository(userRepo) 33 deps.RepoLocator = deps.RepoLocator.SetSpaceRepository(spaceRepo) 34 35 command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("space-users").SetDependency(deps, pluginCall)) 36 } 37 38 BeforeEach(func() { 39 configRepo = testconfig.NewRepositoryWithDefaults() 40 ui = &testterm.FakeUI{} 41 requirementsFactory = &testreq.FakeReqFactory{} 42 spaceRepo = &testapi.FakeSpaceRepository{} 43 userRepo = &testapi.FakeUserRepository{} 44 deps = command_registry.NewDependency() 45 }) 46 47 runCommand := func(args ...string) bool { 48 return testcmd.RunCliCommand("space-users", args, requirementsFactory, updateCommandDependency, false) 49 } 50 51 Describe("requirements", func() { 52 It("fails when not logged in", func() { 53 Expect(runCommand("my-org", "my-space")).To(BeFalse()) 54 }) 55 56 It("succeeds when logged in", func() { 57 requirementsFactory.LoginSuccess = true 58 passed := runCommand("some-org", "whatever-space") 59 60 Expect(passed).To(BeTrue()) 61 Expect("some-org").To(Equal(requirementsFactory.OrganizationName)) 62 }) 63 }) 64 65 It("fails with usage when not invoked with exactly two args", func() { 66 runCommand("my-org") 67 Expect(ui.Outputs).To(ContainSubstrings( 68 []string{"Incorrect Usage", "Requires arguments"}, 69 )) 70 }) 71 72 Context("when logged in and given some users in the org and space", func() { 73 BeforeEach(func() { 74 requirementsFactory.LoginSuccess = true 75 76 org := models.Organization{} 77 org.Name = "Org1" 78 org.Guid = "org1-guid" 79 space := models.Space{} 80 space.Name = "Space1" 81 space.Guid = "space1-guid" 82 83 requirementsFactory.Organization = org 84 spaceRepo.FindByNameInOrgSpace = space 85 86 user := models.UserFields{} 87 user.Username = "user1" 88 user2 := models.UserFields{} 89 user2.Username = "user2" 90 user3 := models.UserFields{} 91 user3.Username = "user3" 92 user4 := models.UserFields{} 93 user4.Username = "user4" 94 userRepo.ListUsersByRole = map[string][]models.UserFields{ 95 models.SPACE_MANAGER: []models.UserFields{user, user2}, 96 models.SPACE_DEVELOPER: []models.UserFields{user4}, 97 models.SPACE_AUDITOR: []models.UserFields{user3}, 98 } 99 }) 100 101 It("tells you about the space users in the given space", func() { 102 runCommand("my-org", "my-space") 103 104 Expect(spaceRepo.FindByNameInOrgName).To(Equal("my-space")) 105 Expect(spaceRepo.FindByNameInOrgOrgGuid).To(Equal("org1-guid")) 106 Expect(userRepo.ListUsersSpaceGuid).To(Equal("space1-guid")) 107 108 Expect(ui.Outputs).To(ContainSubstrings( 109 []string{"Getting users in org", "Org1", "Space1", "my-user"}, 110 []string{"SPACE MANAGER"}, 111 []string{"user1"}, 112 []string{"user2"}, 113 []string{"SPACE DEVELOPER"}, 114 []string{"user4"}, 115 []string{"SPACE AUDITOR"}, 116 []string{"user3"}, 117 )) 118 }) 119 120 Context("when cc api verson is >= 2.21.0", func() { 121 BeforeEach(func() { 122 userRepo.ListUsersInSpaceForRole_CallCount = 0 123 userRepo.ListUsersInSpaceForRoleWithNoUAA_CallCount = 0 124 }) 125 126 It("calls ListUsersInSpaceForRoleWithNoUAA()", func() { 127 configRepo.SetApiVersion("2.22.0") 128 runCommand("my-org", "my-sapce") 129 130 Expect(userRepo.ListUsersInSpaceForRoleWithNoUAA_CallCount).To(BeNumerically(">=", 1)) 131 Expect(userRepo.ListUsersInSpaceForRole_CallCount).To(Equal(0)) 132 }) 133 }) 134 135 Context("when cc api verson is < 2.21.0", func() { 136 It("calls ListUsersInSpaceForRole()", func() { 137 configRepo.SetApiVersion("2.20.0") 138 runCommand("my-org", "my-space") 139 140 Expect(userRepo.ListUsersInSpaceForRoleWithNoUAA_CallCount).To(Equal(0)) 141 Expect(userRepo.ListUsersInSpaceForRole_CallCount).To(BeNumerically(">=", 1)) 142 }) 143 }) 144 }) 145 146 Describe("when invoked by a plugin", func() { 147 var ( 148 pluginUserModel []plugin_models.GetSpaceUsers_Model 149 ) 150 151 Context("single roles", func() { 152 153 BeforeEach(func() { 154 155 org := models.Organization{} 156 org.Name = "the-org" 157 org.Guid = "the-org-guid" 158 159 space := models.Space{} 160 space.Name = "the-space" 161 space.Guid = "the-space-guid" 162 163 // space managers 164 user := models.UserFields{} 165 user.Username = "user1" 166 user.Guid = "1111" 167 168 user2 := models.UserFields{} 169 user2.Username = "user2" 170 user2.Guid = "2222" 171 172 // space auditor 173 user3 := models.UserFields{} 174 user3.Username = "user3" 175 user3.Guid = "3333" 176 177 // space developer 178 user4 := models.UserFields{} 179 user4.Username = "user4" 180 user4.Guid = "4444" 181 182 userRepo.ListUsersByRole = map[string][]models.UserFields{ 183 models.SPACE_MANAGER: []models.UserFields{user, user2}, 184 models.SPACE_DEVELOPER: []models.UserFields{user4}, 185 models.SPACE_AUDITOR: []models.UserFields{user3}, 186 } 187 188 requirementsFactory.LoginSuccess = true 189 requirementsFactory.Organization = org 190 requirementsFactory.Space = space 191 pluginUserModel = []plugin_models.GetSpaceUsers_Model{} 192 deps.PluginModels.SpaceUsers = &pluginUserModel 193 }) 194 195 It("populates the plugin model with users with single roles", func() { 196 testcmd.RunCliCommand("space-users", []string{"the-org", "the-space"}, requirementsFactory, updateCommandDependency, true) 197 198 Ω(pluginUserModel).To(HaveLen(4)) 199 for _, u := range pluginUserModel { 200 switch u.Username { 201 case "user1": 202 Ω(u.Guid).To(Equal("1111")) 203 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER})) 204 case "user2": 205 Ω(u.Guid).To(Equal("2222")) 206 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER})) 207 case "user3": 208 Ω(u.Guid).To(Equal("3333")) 209 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_AUDITOR})) 210 case "user4": 211 Ω(u.Guid).To(Equal("4444")) 212 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_DEVELOPER})) 213 default: 214 Fail("unexpected user: " + u.Username) 215 } 216 } 217 218 }) 219 220 }) 221 222 Context("multiple roles", func() { 223 224 BeforeEach(func() { 225 226 org := models.Organization{} 227 org.Name = "the-org" 228 org.Guid = "the-org-guid" 229 230 space := models.Space{} 231 space.Name = "the-space" 232 space.Guid = "the-space-guid" 233 234 // space managers 235 user := models.UserFields{} 236 user.Username = "user1" 237 user.Guid = "1111" 238 239 user2 := models.UserFields{} 240 user2.Username = "user2" 241 user2.Guid = "2222" 242 243 // space auditor 244 user3 := models.UserFields{} 245 user3.Username = "user3" 246 user3.Guid = "3333" 247 248 // space developer 249 user4 := models.UserFields{} 250 user4.Username = "user4" 251 user4.Guid = "4444" 252 253 userRepo.ListUsersByRole = map[string][]models.UserFields{ 254 models.SPACE_MANAGER: []models.UserFields{user, user2, user3, user4}, 255 models.SPACE_DEVELOPER: []models.UserFields{user2, user4}, 256 models.SPACE_AUDITOR: []models.UserFields{user, user3}, 257 } 258 259 requirementsFactory.LoginSuccess = true 260 requirementsFactory.Organization = org 261 requirementsFactory.Space = space 262 pluginUserModel = []plugin_models.GetSpaceUsers_Model{} 263 deps.PluginModels.SpaceUsers = &pluginUserModel 264 }) 265 266 It("populates the plugin model with users with multiple roles", func() { 267 testcmd.RunCliCommand("space-users", []string{"the-org", "the-space"}, requirementsFactory, updateCommandDependency, true) 268 269 Ω(pluginUserModel).To(HaveLen(4)) 270 for _, u := range pluginUserModel { 271 switch u.Username { 272 case "user1": 273 Ω(u.Guid).To(Equal("1111")) 274 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_AUDITOR})) 275 case "user2": 276 Ω(u.Guid).To(Equal("2222")) 277 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_DEVELOPER})) 278 case "user3": 279 Ω(u.Guid).To(Equal("3333")) 280 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_AUDITOR})) 281 case "user4": 282 Ω(u.Guid).To(Equal("4444")) 283 Ω(u.Roles).To(ConsistOf([]string{models.SPACE_MANAGER, models.SPACE_DEVELOPER})) 284 default: 285 Fail("unexpected user: " + u.Username) 286 } 287 } 288 289 }) 290 291 }) 292 293 }) 294 295 })