github.com/arunkumar7540/cli@v6.45.0+incompatible/integration/shared/isolated/create_user_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/ginkgo/extensions/table"
     7  	. "github.com/onsi/gomega"
     8  	. "github.com/onsi/gomega/gbytes"
     9  	. "github.com/onsi/gomega/gexec"
    10  )
    11  
    12  var _ = Describe("create-user command", func() {
    13  	Describe("help", func() {
    14  		When("--help flag is set", func() {
    15  			It("Displays command usage to output", func() {
    16  				session := helpers.CF("create-user", "--help")
    17  				Eventually(session).Should(Say("NAME:"))
    18  				Eventually(session).Should(Say("create-user - Create a new user"))
    19  				Eventually(session).Should(Say("USAGE:"))
    20  				Eventually(session).Should(Say("cf create-user USERNAME PASSWORD"))
    21  				Eventually(session).Should(Say("cf create-user USERNAME --origin ORIGIN"))
    22  				Eventually(session).Should(Say("EXAMPLES:"))
    23  				Eventually(session).Should(Say("   cf create-user j.smith@example.com S3cr3t                  # internal user"))
    24  				Eventually(session).Should(Say("   cf create-user j.smith@example.com --origin ldap           # LDAP user"))
    25  				Eventually(session).Should(Say("   cf create-user j.smith@example.com --origin provider-alias # SAML or OpenID Connect federated user"))
    26  				Eventually(session).Should(Say("OPTIONS:"))
    27  				Eventually(session).Should(Say("--origin      Origin for mapping a user account to a user in an external identity provider"))
    28  				Eventually(session).Should(Say("SEE ALSO:"))
    29  				Eventually(session).Should(Say("passwd, set-org-role, set-space-role"))
    30  				Eventually(session).Should(Exit(0))
    31  			})
    32  		})
    33  	})
    34  
    35  	When("the environment is not setup correctly", func() {
    36  		It("fails with the appropriate errors", func() {
    37  			helpers.CheckEnvironmentTargetedCorrectly(false, false, ReadOnlyOrg, "create-user", "username", "password")
    38  		})
    39  	})
    40  
    41  	When("the environment is setup correctly", func() {
    42  		When("the logged in user is not authorized to create new users", func() {
    43  			var (
    44  				newUser     string
    45  				newPassword string
    46  			)
    47  
    48  			BeforeEach(func() {
    49  				helpers.LoginCF()
    50  				noobUser := helpers.NewUsername()
    51  				noobPassword := helpers.NewPassword()
    52  				session := helpers.CF("create-user", noobUser, noobPassword)
    53  				Eventually(session).Should(Exit(0))
    54  
    55  				env := map[string]string{
    56  					"CF_USERNAME": noobUser,
    57  					"CF_PASSWORD": noobPassword,
    58  				}
    59  				session = helpers.CFWithEnv(env, "auth")
    60  				Eventually(session).Should(Exit(0))
    61  
    62  				newUser = helpers.NewUsername()
    63  				newPassword = helpers.NewPassword()
    64  			})
    65  
    66  			It("fails with insufficient scope error", func() {
    67  				session := helpers.CF("create-user", newUser, newPassword)
    68  				Eventually(session).Should(Say(`Creating user %s\.\.\.`, newUser))
    69  				Eventually(session).Should(Say(`Error creating user %s\.`, newUser))
    70  				Eventually(session.Err).Should(Say(`You are not authorized to perform the requested action\.`))
    71  				Eventually(session).Should(Say("FAILED"))
    72  				Eventually(session).Should(Exit(1))
    73  			})
    74  		})
    75  
    76  		When("the logged in user is authorized to create new users", func() {
    77  			BeforeEach(func() {
    78  				helpers.LoginCF()
    79  			})
    80  
    81  			When("passed invalid username", func() {
    82  				DescribeTable("when passed funkyUsername",
    83  					func(funkyUsername string) {
    84  						session := helpers.CF("create-user", funkyUsername, helpers.NewPassword())
    85  						Eventually(session).Should(Say("Error creating user %s.", funkyUsername))
    86  						Eventually(session.Err).Should(Say("Username must match pattern: \\[\\\\p\\{L\\}\\+0\\-9\\+\\\\\\-_\\.@'!\\]\\+"))
    87  						Eventually(session).Should(Say("FAILED"))
    88  						Eventually(session).Should(Exit(1))
    89  					},
    90  
    91  					Entry("fails when passed an emoji", "😀"),
    92  					Entry("fails when passed a backtick", "`"),
    93  				)
    94  
    95  				When("the username is empty", func() {
    96  					It("fails with a username must be provided error", func() {
    97  						session := helpers.CF("create-user", "", helpers.NewPassword())
    98  						Eventually(session).Should(Say("Error creating user ."))
    99  						Eventually(session.Err).Should(Say("A username must be provided."))
   100  						Eventually(session).Should(Say("FAILED"))
   101  						Eventually(session).Should(Exit(1))
   102  					})
   103  				})
   104  			})
   105  
   106  			When("the user passes in an origin flag", func() {
   107  				When("the origin is UAA", func() {
   108  					When("password is not present", func() {
   109  						It("errors and prints usage", func() {
   110  							newUser := helpers.NewUsername()
   111  							session := helpers.CF("create-user", newUser, "--origin", "UAA")
   112  							Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `PASSWORD` was not provided"))
   113  							Eventually(session).Should(Say("FAILED"))
   114  							Eventually(session).Should(Say("USAGE"))
   115  							Eventually(session).Should(Exit(1))
   116  						})
   117  					})
   118  				})
   119  				When("the origin is the empty string", func() {
   120  					When("password is not present", func() {
   121  						It("errors and prints usage", func() {
   122  							newUser := helpers.NewUsername()
   123  							session := helpers.CF("create-user", newUser, "--origin", "")
   124  							Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `PASSWORD` was not provided"))
   125  							Eventually(session).Should(Say("FAILED"))
   126  							Eventually(session).Should(Say("USAGE"))
   127  							Eventually(session).Should(Exit(1))
   128  						})
   129  					})
   130  				})
   131  
   132  				When("the origin is not UAA or empty", func() {
   133  					It("creates the new user in the specified origin", func() {
   134  						newUser := helpers.NewUsername()
   135  						session := helpers.CF("create-user", newUser, "--origin", "ldap")
   136  						Eventually(session).Should(Say("Creating user %s...", newUser))
   137  						Eventually(session).Should(Say("OK"))
   138  						Eventually(session).Should(Say("TIP: Assign roles with 'cf set-org-role' and 'cf set-space-role'"))
   139  						Eventually(session).Should(Exit(0))
   140  					})
   141  				})
   142  
   143  				When("argument for flag is not present", func() {
   144  					It("fails with incorrect usage error", func() {
   145  						session := helpers.CF("create-user", helpers.NewUsername(), "--origin")
   146  						Eventually(session.Err).Should(Say("Incorrect Usage: expected argument for flag `--origin'"))
   147  						Eventually(session).Should(Exit(1))
   148  					})
   149  				})
   150  			})
   151  
   152  			When("password is not present", func() {
   153  				It("fails with incorrect usage error", func() {
   154  					session := helpers.CF("create-user", helpers.NewUsername())
   155  					Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `PASSWORD` was not provided"))
   156  					Eventually(session).Should(Say("FAILED"))
   157  					Eventually(session).Should(Say("USAGE"))
   158  					Eventually(session).Should(Exit(1))
   159  				})
   160  			})
   161  
   162  			When("the user already exists", func() {
   163  				var (
   164  					newUser     string
   165  					newPassword string
   166  				)
   167  
   168  				BeforeEach(func() {
   169  					newUser = helpers.NewUsername()
   170  					newPassword = helpers.NewPassword()
   171  					session := helpers.CF("create-user", newUser, newPassword)
   172  					Eventually(session).Should(Exit(0))
   173  				})
   174  
   175  				It("fails with the user already exists message", func() {
   176  					session := helpers.CF("create-user", newUser, newPassword)
   177  					Eventually(session.Err).Should(Say("user %s already exists", newUser))
   178  					Eventually(session).Should(Say("OK"))
   179  					Eventually(session).Should(Exit(0))
   180  				})
   181  			})
   182  
   183  			When("the user does not already exist", func() {
   184  				It("creates the new user", func() {
   185  					newUser := helpers.NewUsername()
   186  					newPassword := helpers.NewPassword()
   187  					session := helpers.CF("create-user", newUser, newPassword)
   188  					Eventually(session).Should(Say("Creating user %s...", newUser))
   189  					Eventually(session).Should(Say("OK"))
   190  					Eventually(session).Should(Say("TIP: Assign roles with 'cf set-org-role' and 'cf set-space-role'"))
   191  					Eventually(session).Should(Exit(0))
   192  				})
   193  			})
   194  		})
   195  	})
   196  })