github.com/sleungcy/cli@v7.1.0+incompatible/integration/v7/isolated/create_service_broker_command_test.go (about)

     1  package isolated
     2  
     3  import (
     4  	"io"
     5  
     6  	"code.cloudfoundry.org/cli/integration/helpers/servicebrokerstub"
     7  
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
     9  	"code.cloudfoundry.org/cli/integration/helpers"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  	. "github.com/onsi/gomega/gbytes"
    13  	. "github.com/onsi/gomega/gexec"
    14  )
    15  
    16  var _ = Describe("create-service-broker command", func() {
    17  	var brokerName string
    18  
    19  	BeforeEach(func() {
    20  		helpers.SkipIfV7AndVersionLessThan(ccversion.MinVersionCreateServiceBrokerV3)
    21  
    22  		brokerName = helpers.NewServiceBrokerName()
    23  
    24  		helpers.LoginCF()
    25  	})
    26  
    27  	Describe("help", func() {
    28  		When("--help flag is set", func() {
    29  			It("displays command usage to output", func() {
    30  				session := helpers.CF("create-service-broker", "--help")
    31  				Eventually(session).Should(Say("NAME:"))
    32  				Eventually(session).Should(Say("\\s+create-service-broker - Create a service broker"))
    33  
    34  				Eventually(session).Should(Say("USAGE:"))
    35  				Eventually(session).Should(Say("\\s+cf create-service-broker SERVICE_BROKER USERNAME PASSWORD URL \\[--space-scoped\\]"))
    36  
    37  				Eventually(session).Should(Say("ALIAS:"))
    38  				Eventually(session).Should(Say("\\s+csb"))
    39  
    40  				Eventually(session).Should(Say("OPTIONS:"))
    41  				Eventually(session).Should(Say("\\s+--space-scoped      Make the broker's service plans only visible within the targeted space"))
    42  
    43  				Eventually(session).Should(Say("SEE ALSO:"))
    44  				Eventually(session).Should(Say("\\s+enable-service-access, service-brokers, target"))
    45  
    46  				Eventually(session).Should(Exit(0))
    47  			})
    48  		})
    49  	})
    50  
    51  	When("not logged in", func() {
    52  		BeforeEach(func() {
    53  			helpers.LogoutCF()
    54  		})
    55  
    56  		It("displays an informative error that the user must be logged in", func() {
    57  			session := helpers.CF("create-service-broker", brokerName, "user", "pass", "http://example.com")
    58  			Eventually(session).Should(Say("FAILED"))
    59  			Eventually(session.Err).Should(Say("Not logged in. Use 'cf login' or 'cf login --sso' to log in."))
    60  			Eventually(session).Should(Exit(1))
    61  		})
    62  	})
    63  
    64  	When("logged in", func() {
    65  		When("all arguments are provided", func() {
    66  			When("no org or space is targeted", func() {
    67  				var (
    68  					username  string
    69  					orgName   string
    70  					spaceName string
    71  					broker    *servicebrokerstub.ServiceBrokerStub
    72  				)
    73  
    74  				BeforeEach(func() {
    75  					username, _ = helpers.GetCredentials()
    76  					orgName = helpers.NewOrgName()
    77  					spaceName = helpers.NewSpaceName()
    78  					helpers.SetupCF(orgName, spaceName)
    79  					broker = servicebrokerstub.Create()
    80  					helpers.ClearTarget()
    81  				})
    82  
    83  				AfterEach(func() {
    84  					Eventually(helpers.CF("delete-service-broker", brokerName, "-f")).Should(Exit(0))
    85  					helpers.QuickDeleteOrg(orgName)
    86  					broker.Forget()
    87  				})
    88  
    89  				It("registers the broker and service offerings and plans are available", func() {
    90  					session := helpers.CF("create-service-broker", brokerName, broker.Username, broker.Password, broker.URL)
    91  					Eventually(session).Should(Say("Creating service broker %s as %s...", brokerName, username))
    92  					Eventually(session).Should(Say("OK"))
    93  					Eventually(session).Should(Exit(0))
    94  
    95  					session = helpers.CF("service-access", "-b", brokerName)
    96  					Eventually(session).Should(Say(broker.FirstServiceOfferingName()))
    97  					Eventually(session).Should(Say(broker.FirstServicePlanName()))
    98  
    99  					session = helpers.CF("service-brokers")
   100  					Eventually(session).Should(Say(brokerName))
   101  				})
   102  			})
   103  
   104  			When("the --space-scoped flag is passed", func() {
   105  				BeforeEach(func() {
   106  					helpers.SkipIfV7AndVersionLessThan(ccversion.MinVersionCreateSpaceScopedServiceBrokerV3)
   107  				})
   108  
   109  				When("no org or space is targeted", func() {
   110  					BeforeEach(func() {
   111  						helpers.ClearTarget()
   112  					})
   113  
   114  					It("displays an informative error that a space must be targeted", func() {
   115  						session := helpers.CF("create-service-broker", "space-scoped-broker", "username", "password", "http://example.com", "--space-scoped")
   116  						Eventually(session).Should(Say("FAILED"))
   117  						Eventually(session.Err).Should(Say("No org targeted, use 'cf target -o ORG' to target an org."))
   118  						Eventually(session).Should(Exit(1))
   119  					})
   120  				})
   121  
   122  				When("both org and space are targeted", func() {
   123  					var (
   124  						username  string
   125  						orgName   string
   126  						spaceName string
   127  						broker    *servicebrokerstub.ServiceBrokerStub
   128  					)
   129  
   130  					BeforeEach(func() {
   131  						username, _ = helpers.GetCredentials()
   132  						orgName = helpers.NewOrgName()
   133  						spaceName = helpers.NewSpaceName()
   134  						helpers.SetupCF(orgName, spaceName)
   135  						broker = servicebrokerstub.Create()
   136  					})
   137  
   138  					AfterEach(func() {
   139  						Eventually(helpers.CF("delete-service-broker", brokerName, "-f")).Should(Exit(0))
   140  						helpers.QuickDeleteOrg(orgName)
   141  						broker.Forget()
   142  					})
   143  
   144  					It("registers the broker and exposes its services only to the targeted space", func() {
   145  						session := helpers.CF("create-service-broker", brokerName, broker.Username, broker.Password, broker.URL, "--space-scoped")
   146  						Eventually(session).Should(Say(
   147  							"Creating service broker %s in org %s / space %s as %s...", brokerName, orgName, spaceName, username))
   148  						Eventually(session).Should(Say("OK"))
   149  						Eventually(session).Should(Exit(0))
   150  
   151  						session = helpers.CF("service-brokers")
   152  						Eventually(session).Should(Say(brokerName))
   153  
   154  						Eventually(func() io.Reader {
   155  							session := helpers.CF("marketplace")
   156  							Eventually(session).Should(Exit(0))
   157  
   158  							return session.Out
   159  						}).Should(Say(broker.FirstServicePlanName()))
   160  
   161  						helpers.TargetOrgAndSpace(ReadOnlyOrg, ReadOnlySpace)
   162  						session = helpers.CF("marketplace")
   163  						Eventually(session).ShouldNot(Say(broker.FirstServicePlanName()))
   164  					})
   165  				})
   166  			})
   167  		})
   168  	})
   169  
   170  	When("the broker URL is invalid", func() {
   171  		BeforeEach(func() {
   172  			// TODO: replace skip with versioned skip when
   173  			// https://www.pivotaltracker.com/story/show/166215494 is resolved.
   174  			helpers.SkipIfV7()
   175  		})
   176  
   177  		It("displays a relevant error", func() {
   178  			session := helpers.CF("create-service-broker", brokerName, "user", "pass", "not-a-valid-url")
   179  			Eventually(session).Should(Say("FAILED"))
   180  			Eventually(session.Err).Should(Say("not-a-valid-url is not a valid URL"))
   181  			Eventually(session).Should(Exit(1))
   182  		})
   183  	})
   184  
   185  	When("no arguments are provided", func() {
   186  		It("displays an error, naming each of the missing args and the help text", func() {
   187  			session := helpers.CF("create-service-broker")
   188  			Eventually(session.Err).Should(Say("Incorrect Usage: the required arguments `SERVICE_BROKER`, `USERNAME`, `PASSWORD` and `URL` were not provided"))
   189  
   190  			Eventually(session).Should(Say("NAME:"))
   191  			Eventually(session).Should(Say("\\s+create-service-broker - Create a service broker"))
   192  
   193  			Eventually(session).Should(Say("USAGE:"))
   194  			Eventually(session).Should(Say("\\s+cf create-service-broker SERVICE_BROKER USERNAME PASSWORD URL \\[--space-scoped\\]"))
   195  
   196  			Eventually(session).Should(Say("ALIAS:"))
   197  			Eventually(session).Should(Say("\\s+csb"))
   198  
   199  			Eventually(session).Should(Say("OPTIONS:"))
   200  			Eventually(session).Should(Say("\\s+--space-scoped      Make the broker's service plans only visible within the targeted space"))
   201  
   202  			Eventually(session).Should(Say("SEE ALSO:"))
   203  			Eventually(session).Should(Say("\\s+enable-service-access, service-brokers, target"))
   204  
   205  			Eventually(session).Should(Exit(1))
   206  		})
   207  	})
   208  })