github.com/sleungcy/cli@v7.1.0+incompatible/integration/v7/isolated/set_space_role_command_test.go (about) 1 package isolated 2 3 import ( 4 "code.cloudfoundry.org/cli/integration/helpers" 5 . "github.com/onsi/ginkgo" 6 . "github.com/onsi/gomega" 7 . "github.com/onsi/gomega/gbytes" 8 . "github.com/onsi/gomega/gexec" 9 ) 10 11 var _ = Describe("set-space-role command", func() { 12 Describe("help text and argument validation", func() { 13 When("--help flag is set", func() { 14 It("Displays command usage to output", func() { 15 session := helpers.CF("set-space-role", "--help") 16 Eventually(session).Should(Say("NAME:")) 17 Eventually(session).Should(Say("set-space-role - Assign a space role to a user")) 18 Eventually(session).Should(Say("USAGE:")) 19 Eventually(session).Should(Say("cf set-space-role USERNAME ORG SPACE ROLE")) 20 Eventually(session).Should(Say(`cf set-space-role USERNAME ORG SPACE ROLE \[--client\]`)) 21 Eventually(session).Should(Say(`cf set-space-role USERNAME ORG SPACE ROLE \[--origin ORIGIN\]`)) 22 Eventually(session).Should(Say("ROLES:")) 23 Eventually(session).Should(Say("SpaceManager - Invite and manage users, and enable features for a given space")) 24 Eventually(session).Should(Say("SpaceDeveloper - Create and manage apps and services, and see logs and reports")) 25 Eventually(session).Should(Say("SpaceAuditor - View logs, reports, and settings on this space")) 26 Eventually(session).Should(Say("OPTIONS:")) 27 Eventually(session).Should(Say(`--client\s+Assign a space role to a client-id of a \(non-user\) service account`)) 28 Eventually(session).Should(Say(`--origin\s+Indicates the identity provider to be used for authentication`)) 29 Eventually(session).Should(Say("SEE ALSO:")) 30 Eventually(session).Should(Say("space-users, unset-space-role")) 31 Eventually(session).Should(Exit(0)) 32 }) 33 }) 34 35 When("the role type is invalid", func() { 36 It("prints a useful error, prints help text, and exits 1", func() { 37 session := helpers.CF("set-space-role", "some-user", "some-org", "some-space", "NotARealRole") 38 Eventually(session.Err).Should(Say(`Incorrect Usage: ROLE must be "SpaceManager", "SpaceDeveloper" and "SpaceAuditor"`)) 39 Eventually(session).Should(Say(`NAME:`)) 40 Eventually(session).Should(Exit(1)) 41 }) 42 }) 43 44 When("too few arguments are passed", func() { 45 It("prints a useful error, prints help text, and exits 1", func() { 46 session := helpers.CF("set-space-role", "not-enough", "arguments") 47 Eventually(session.Err).Should(Say("Incorrect Usage: the required arguments `SPACE` and `ROLE` were not provided")) 48 Eventually(session).Should(Say(`NAME:`)) 49 Eventually(session).Should(Exit(1)) 50 }) 51 }) 52 53 When("too many arguments are passed", func() { 54 It("prints a useful error, prints help text, and exits 1", func() { 55 session := helpers.CF("set-space-role", "some-user", "some-org", "some-space", "SpaceAuditor", "some-extra-argument") 56 Eventually(session.Err).Should(Say(`Incorrect Usage: unexpected argument "some-extra-argument"`)) 57 Eventually(session).Should(Say(`NAME:`)) 58 Eventually(session).Should(Exit(1)) 59 }) 60 }) 61 }) 62 63 Describe("command behavior", func() { 64 var ( 65 privilegedUsername string 66 orgName string 67 spaceName string 68 ) 69 70 BeforeEach(func() { 71 privilegedUsername = helpers.LoginCF() 72 orgName = helpers.NewOrgName() 73 spaceName = helpers.NewSpaceName() 74 helpers.CreateOrgAndSpace(orgName, spaceName) 75 }) 76 77 AfterEach(func() { 78 helpers.QuickDeleteOrg(orgName) 79 }) 80 81 When("logged in as a privileged user", func() { 82 When("the --client flag is passed", func() { 83 var clientID string 84 85 BeforeEach(func() { 86 clientID, _ = helpers.SkipIfClientCredentialsNotSet() 87 }) 88 89 When("the client exists", func() { 90 It("sets the org role for the client", func() { 91 session := helpers.CF("set-space-role", clientID, orgName, spaceName, "SpaceAuditor", "--client") 92 Eventually(session).Should(Say("Assigning role SpaceAuditor to user %s in org %s / space %s as %s...", clientID, orgName, spaceName, privilegedUsername)) 93 Eventually(session).Should(Say("OK")) 94 Eventually(session).Should(Exit(0)) 95 }) 96 97 When("the client is not authorized to look up clients in UAA", func() { 98 BeforeEach(func() { 99 helpers.SwitchToSpaceRole(orgName, spaceName, "SpaceManager") 100 }) 101 102 It("prints an appropriate error and exits 1", func() { 103 session := helpers.CF("set-space-role", clientID, orgName, spaceName, "SpaceAuditor", "--client", "-v") 104 Eventually(session).Should(Say("FAILED")) 105 Eventually(session.Err).Should(Say("You are not authorized to perform the requested action.")) 106 Eventually(session).Should(Exit(1)) 107 }) 108 }) 109 }) 110 111 When("the targeted client does not exist", func() { 112 var badClientID string 113 114 BeforeEach(func() { 115 badClientID = "nonexistent-client" 116 }) 117 118 It("fails with an appropriate error message", func() { 119 session := helpers.CF("set-space-role", badClientID, orgName, spaceName, "SpaceAuditor", "--client") 120 Eventually(session.Err).Should(Say("Users cannot be assigned roles in a space if they do not have a role in that space's organization.")) 121 Eventually(session).Should(Say("FAILED")) 122 Eventually(session).Should(Exit(1)) 123 }) 124 }) 125 }) 126 127 When("the user exists", func() { 128 var username string 129 130 BeforeEach(func() { 131 username, _ = helpers.CreateUser() 132 }) 133 134 When("the passed role is lowercase", func() { 135 It("sets the space role for the user", func() { 136 session := helpers.CF("set-space-role", username, orgName, spaceName, "spaceauditor") 137 Eventually(session).Should(Say("Assigning role SpaceAuditor to user %s in org %s / space %s as %s...", username, orgName, spaceName, privilegedUsername)) 138 Eventually(session).Should(Say("OK")) 139 Eventually(session).Should(Exit(0)) 140 }) 141 }) 142 143 It("sets the space role for the user", func() { 144 session := helpers.CF("set-space-role", username, orgName, spaceName, "SpaceAuditor") 145 Eventually(session).Should(Say("Assigning role SpaceAuditor to user %s in org %s / space %s as %s...", username, orgName, spaceName, privilegedUsername)) 146 Eventually(session).Should(Say("OK")) 147 Eventually(session).Should(Exit(0)) 148 }) 149 150 When("the user already has the desired role", func() { 151 BeforeEach(func() { 152 session := helpers.CF("set-space-role", username, orgName, spaceName, "SpaceDeveloper") 153 Eventually(session).Should(Say("Assigning role SpaceDeveloper to user %s in org %s / space %s as %s...", username, orgName, spaceName, privilegedUsername)) 154 Eventually(session).Should(Exit(0)) 155 }) 156 157 It("is idempotent", func() { 158 session := helpers.CF("set-space-role", username, orgName, spaceName, "SpaceDeveloper") 159 Eventually(session).Should(Say("Assigning role SpaceDeveloper to user %s in org %s / space %s as %s...", username, orgName, spaceName, privilegedUsername)) 160 Eventually(session).Should(Exit(0)) 161 }) 162 }) 163 164 When("the org does not exist", func() { 165 It("prints an appropriate error and exits 1", func() { 166 session := helpers.CF("set-space-role", username, "invalid-org", spaceName, "SpaceAuditor") 167 Eventually(session).Should(Say("FAILED")) 168 Eventually(session.Err).Should(Say("Organization 'invalid-org' not found.")) 169 Eventually(session).Should(Exit(1)) 170 }) 171 }) 172 173 When("the space does not exist", func() { 174 It("prints an appropriate error and exits 1", func() { 175 session := helpers.CF("set-space-role", username, orgName, "invalid-space", "SpaceAuditor") 176 Eventually(session).Should(Say("FAILED")) 177 Eventually(session.Err).Should(Say("Space 'invalid-space' not found.")) 178 Eventually(session).Should(Exit(1)) 179 }) 180 }) 181 182 When("there are multiple users with the same username but different origins", func() { 183 BeforeEach(func() { 184 session := helpers.CF("create-user", username, "--origin", helpers.NonUAAOrigin) 185 Eventually(session).Should(Exit(0)) 186 }) 187 188 AfterEach(func() { 189 session := helpers.CF("delete-user", username, "--origin", helpers.NonUAAOrigin, "-f") 190 Eventually(session).Should(Exit(0)) 191 }) 192 193 It("returns an error and asks the user to use the --origin flag", func() { 194 session := helpers.CF("set-space-role", username, orgName, spaceName, "SpaceManager") 195 Eventually(session).Should(Say("Assigning role SpaceManager to user %s in org %s / space %s as %s...", username, orgName, spaceName, privilegedUsername)) 196 Eventually(session.Err).Should(Say("Ambiguous user. User with username '%s' exists in the following origins: cli-oidc-provider, uaa. Specify an origin to disambiguate.", username)) 197 Eventually(session).Should(Exit(1)) 198 }) 199 }) 200 }) 201 202 When("the user does not exist", func() { 203 It("prints an appropriate error and exits 1", func() { 204 session := helpers.CF("set-space-role", "not-exists", orgName, spaceName, "SpaceAuditor") 205 Eventually(session).Should(Say("Assigning role SpaceAuditor to user not-exists in org %s / space %s as %s...", orgName, spaceName, privilegedUsername)) 206 Eventually(session).Should(Say("FAILED")) 207 Eventually(session.Err).Should(Say("No user exists with the username 'not-exists'.")) 208 Eventually(session).Should(Exit(1)) 209 }) 210 }) 211 }) 212 213 When("the logged in user does not have permission to write to the space", func() { 214 var username string 215 216 BeforeEach(func() { 217 username, _ = helpers.CreateUser() 218 helpers.SwitchToSpaceRole(orgName, spaceName, "SpaceAuditor") 219 }) 220 221 It("prints out the error message from CC API and exits 1", func() { 222 session := helpers.CF("set-space-role", username, orgName, spaceName, "SpaceAuditor") 223 Eventually(session).Should(Say("FAILED")) 224 Eventually(session.Err).Should(Say("You are not authorized to perform the requested action")) 225 Eventually(session).Should(Exit(1)) 226 }) 227 }) 228 229 When("the logged in user has insufficient permissions to see the user", func() { 230 var username string 231 232 BeforeEach(func() { 233 username, _ = helpers.CreateUser() 234 helpers.SwitchToSpaceRole(orgName, spaceName, "SpaceManager") 235 }) 236 237 It("prints out the error message from CC API and exits 1", func() { 238 session := helpers.CF("set-space-role", username, orgName, spaceName, "SpaceAuditor", "-v") 239 Eventually(session).Should(Say("FAILED")) 240 Eventually(session.Err).Should(Say("Users cannot be assigned roles in a space if they do not have a role in that space's organization.")) 241 Eventually(session).Should(Exit(1)) 242 }) 243 }) 244 245 When("the logged in user has insufficient permissions to create roles in the space", func() { 246 var userInOrg string 247 248 BeforeEach(func() { 249 userInOrg, _ = helpers.CreateUser() 250 Eventually(helpers.CF("set-org-role", userInOrg, orgName, "OrgAuditor")).Should(Exit(0)) 251 helpers.SwitchToSpaceRole(orgName, spaceName, "SpaceAuditor") 252 }) 253 254 It("prints out the error message from CC API and exits 1", func() { 255 session := helpers.CF("set-space-role", userInOrg, orgName, spaceName, "SpaceAuditor") 256 Eventually(session).Should(Say("FAILED")) 257 Eventually(session.Err).Should(Say("You are not authorized to perform the requested action")) 258 Eventually(session).Should(Exit(1)) 259 }) 260 }) 261 }) 262 })