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

     1  package isolated
     2  
     3  import (
     4  	. "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers"
     5  	"code.cloudfoundry.org/cli/integration/helpers"
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  	. "github.com/onsi/gomega/gbytes"
     9  	. "github.com/onsi/gomega/gexec"
    10  )
    11  
    12  var _ = Describe("domains command", func() {
    13  	Describe("help", func() {
    14  		It("appears in cf help -a", func() {
    15  			session := helpers.CF("help", "-a")
    16  			Eventually(session).Should(Exit(0))
    17  			Expect(session).To(HaveCommandInCategoryWithDescription("domains", "DOMAINS", "List domains in the target org"))
    18  		})
    19  
    20  		When("--help flag is set", func() {
    21  			It("displays command usage to output", func() {
    22  				session := helpers.CF("domains", "--help")
    23  				Eventually(session).Should(Say("NAME:"))
    24  				Eventually(session).Should(Say(`\s+domains - List domains in the target org`))
    25  
    26  				Eventually(session).Should(Say("USAGE:"))
    27  				Eventually(session).Should(Say(`\s+cf domains`))
    28  
    29  				Eventually(session).Should(Say("EXAMPLES:"))
    30  				Eventually(session).Should(Say(`\s+cf domains`))
    31  				Eventually(session).Should(Say(`\s+cf domains --labels 'environment in \(production,staging\),tier in \(backend\)'`))
    32  				Eventually(session).Should(Say(`\s+cf domains --labels 'env=dev,!chargeback-code,tier in \(backend,worker\)'`))
    33  
    34  				Eventually(session).Should(Say("OPTIONS:"))
    35  				Eventually(session).Should(Say(`--labels\s+Selector to filter domains by labels`))
    36  
    37  				Eventually(session).Should(Say("SEE ALSO:"))
    38  				Eventually(session).Should(Say(`\s+create-private-domain, create-route, create-shared-domain, routes, set-label`))
    39  				Eventually(session).Should(Exit(0))
    40  			})
    41  		})
    42  	})
    43  
    44  	When("user is not logged in", func() {
    45  		BeforeEach(func() {
    46  			helpers.LogoutCF()
    47  		})
    48  
    49  		It("displays an error message and fails", func() {
    50  			session := helpers.CF("domains")
    51  			Eventually(session).Should(Say("FAILED"))
    52  			Eventually(session.Err).Should(Say("Not logged in. Use 'cf login' or 'cf login --sso' to log in."))
    53  			Eventually(session).Should(Exit(1))
    54  		})
    55  	})
    56  
    57  	When("a random argument is passed to the command", func() {
    58  		It("displays an error message and fails", func() {
    59  			session := helpers.CF("domains", "random-arg")
    60  			Eventually(session).Should(Say("FAILED"))
    61  			Eventually(session.Err).Should(Say(`Incorrect Usage: unexpected argument "random-arg"`))
    62  			Eventually(session).Should(Say("NAME:"))
    63  			Eventually(session).Should(Say(`\s+domains - List domains in the target org`))
    64  			Eventually(session).Should(Say("USAGE:"))
    65  			Eventually(session).Should(Say(`\s+cf domains`))
    66  			Eventually(session).Should(Say("OPTIONS:"))
    67  			Eventually(session).Should(Say(`--labels\s+Selector to filter domains by labels`))
    68  			Eventually(session).Should(Say("SEE ALSO:"))
    69  			Eventually(session).Should(Say(`\s+create-private-domain, create-route, create-shared-domain, routes`))
    70  			Eventually(session).Should(Exit(1))
    71  		})
    72  	})
    73  
    74  	When("no org is targeted", func() {
    75  		BeforeEach(func() {
    76  			helpers.LoginCF()
    77  		})
    78  
    79  		It("displays an error message and fails", func() {
    80  			session := helpers.CF("domains")
    81  			Eventually(session).Should(Say("FAILED"))
    82  			Eventually(session.Err).Should(Say(`No org targeted, use 'cf target -o ORG' to target an org.`))
    83  			Eventually(session).Should(Exit(1))
    84  		})
    85  	})
    86  
    87  	When("logged in", func() {
    88  		var (
    89  			userName      string
    90  			orgName       string
    91  			spaceName     string
    92  			sharedDomain1 helpers.Domain
    93  			sharedDomain2 helpers.Domain
    94  			tcpDomain     helpers.Domain
    95  		)
    96  
    97  		BeforeEach(func() {
    98  			userName, _ = helpers.GetCredentials()
    99  			orgName = helpers.NewOrgName()
   100  			spaceName = helpers.NewSpaceName()
   101  			helpers.SetupCF(orgName, spaceName)
   102  
   103  			sharedDomain1 = helpers.NewDomain(orgName, helpers.NewDomainName("a"))
   104  			sharedDomain1.CreateShared()
   105  
   106  			sharedDomain2 = helpers.NewDomain(orgName, helpers.NewDomainName("b"))
   107  			sharedDomain2.CreateShared()
   108  
   109  			routerGroupName := helpers.FindOrCreateTCPRouterGroup(4)
   110  			tcpDomain = helpers.NewDomain(orgName, helpers.NewDomainName("c"))
   111  			tcpDomain.CreateWithRouterGroup(routerGroupName)
   112  			Eventually(helpers.CF("set-label", "domain", sharedDomain1.Name, "keyfor1=valuefor1")).Should(Exit(0))
   113  		})
   114  
   115  		AfterEach(func() {
   116  			Eventually(helpers.CF("delete-shared-domain", sharedDomain1.Name, "-f")).Should(Exit(0))
   117  			Eventually(helpers.CF("delete-shared-domain", sharedDomain2.Name, "-f")).Should(Exit(0))
   118  			Eventually(helpers.CF("delete-shared-domain", tcpDomain.Name, "-f")).Should(Exit(0))
   119  			helpers.QuickDeleteOrg(orgName)
   120  		})
   121  
   122  		It("displays the shared domains and denotes that they are shared", func() {
   123  			session := helpers.CF("domains")
   124  			Eventually(session).Should(Exit(0))
   125  
   126  			Expect(session).Should(Say(`Getting domains in org %s as %s\.\.\.`, orgName, userName))
   127  			Expect(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   128  			Expect(session).Should(Say(`%s\s+shared\s+http`, sharedDomain1.Name))
   129  			Expect(session).Should(Say(`%s\s+shared\s+http`, sharedDomain2.Name))
   130  			Expect(session).Should(Say(`%s\s+shared\s+tcp`, tcpDomain.Name))
   131  		})
   132  
   133  		It("displays the shared domains and denotes that they are shared for matching labels only", func() {
   134  			session := helpers.CF("domains", "--labels", "keyfor1=valuefor1")
   135  			Eventually(session).Should(Exit(0))
   136  
   137  			Expect(session).Should(Say(`Getting domains in org %s as %s\.\.\.`, orgName, userName))
   138  			Expect(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   139  			Expect(session).Should(Say(`%s\s+shared\s+http`, sharedDomain1.Name))
   140  			Expect(session).ShouldNot(Say(`%s\s+shared\s+http`, sharedDomain2.Name))
   141  		})
   142  
   143  		When("the shared domain is internal", func() {
   144  			var internalDomainName string
   145  
   146  			BeforeEach(func() {
   147  				internalDomainName = helpers.NewDomainName()
   148  				internalDomain := helpers.NewDomain(orgName, internalDomainName)
   149  				internalDomain.CreateInternal()
   150  			})
   151  
   152  			AfterEach(func() {
   153  				Eventually(helpers.CF("delete-shared-domain", internalDomainName, "-f")).Should(Exit(0))
   154  			})
   155  
   156  			It("displays the internal flag on the shared domain", func() {
   157  				session := helpers.CF("domains")
   158  				Eventually(session).Should(Exit(0))
   159  
   160  				Expect(session).Should(Say(`Getting domains in org %s as %s`, orgName, userName))
   161  				Expect(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   162  				Expect(session).Should(Say(`%s\s+shared\s+true`, internalDomainName))
   163  			})
   164  
   165  			It("displays the shared domains and denotes that they are shared for matching labels only", func() {
   166  				session := helpers.CF("domains", "--labels", "keyfor1=valuefor1")
   167  				Eventually(session).Should(Exit(0))
   168  
   169  				Expect(session).Should(Say(`Getting domains in org %s as %s\.\.\.`, orgName, userName))
   170  				Expect(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   171  				Expect(session).Should(Say(`%s\s+shared\s+http`, sharedDomain1.Name))
   172  				Expect(session).ShouldNot(Say(`%s\s+shared\s+http`, sharedDomain2.Name))
   173  				Expect(session).ShouldNot(Say(internalDomainName))
   174  			})
   175  		})
   176  
   177  		When("the targeted org has a private domain", func() {
   178  			var privateDomain1, privateDomain2 helpers.Domain
   179  
   180  			BeforeEach(func() {
   181  				privateDomain1 = helpers.NewDomain(orgName, helpers.NewDomainName("a"))
   182  				privateDomain1.Create()
   183  
   184  				privateDomain2 = helpers.NewDomain(orgName, helpers.NewDomainName("b"))
   185  				privateDomain2.Create()
   186  
   187  				Eventually(helpers.CF("set-label", "domain", privateDomain2.Name, "keyfor2=valuefor2")).Should(Exit(0))
   188  			})
   189  
   190  			AfterEach(func() {
   191  				Eventually(helpers.CF("delete-private-domain", privateDomain1.Name, "-f")).Should(Exit(0))
   192  				Eventually(helpers.CF("delete-private-domain", privateDomain2.Name, "-f")).Should(Exit(0))
   193  			})
   194  
   195  			It("displays the private domains", func() {
   196  				session := helpers.CF("domains")
   197  
   198  				Eventually(session).Should(Exit(0))
   199  				Expect(session).Should(Say(`Getting domains in org %s as %s`, orgName, userName))
   200  				Expect(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   201  				Expect(session).Should(Say(`%s\s+private\s+http`, privateDomain1.Name))
   202  				Expect(session).Should(Say(`%s\s+private\s+http`, privateDomain2.Name))
   203  			})
   204  
   205  			It("filters private domains by label", func() {
   206  				session := helpers.CF("domains", "--labels", "keyfor2=valuefor2")
   207  
   208  				Eventually(session).Should(Exit(0))
   209  				Expect(session).Should(Say(`Getting domains in org %s as %s`, orgName, userName))
   210  				Expect(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   211  				Expect(session).ShouldNot(Say(`%s\s+private\s+http`, privateDomain1.Name))
   212  				Expect(session).Should(Say(`%s\s+private\s+http`, privateDomain2.Name))
   213  			})
   214  
   215  			When("targeting a different org", func() {
   216  				var (
   217  					newOrgName     string
   218  					newSpaceName   string
   219  					privateDomain3 helpers.Domain
   220  				)
   221  
   222  				BeforeEach(func() {
   223  					newOrgName = helpers.NewOrgName()
   224  					newSpaceName = helpers.NewSpaceName()
   225  					helpers.SetupCF(newOrgName, newSpaceName)
   226  
   227  					privateDomain3 = helpers.NewDomain(newOrgName, helpers.NewDomainName("c"))
   228  					privateDomain3.Create()
   229  				})
   230  
   231  				AfterEach(func() {
   232  					helpers.QuickDeleteOrg(newOrgName)
   233  					// Outer after-eaches require the initial org/space to be targetted
   234  					helpers.TargetOrgAndSpace(orgName, spaceName)
   235  				})
   236  
   237  				It("should not display the private domains of other orgs", func() {
   238  					session := helpers.CF("domains")
   239  
   240  					Eventually(session).Should(Say(`Getting domains in org %s as %s`, newOrgName, userName))
   241  					Eventually(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   242  
   243  					Consistently(session).ShouldNot(Say(`%s`, privateDomain1.Name))
   244  					Consistently(session).ShouldNot(Say(`%s`, privateDomain2.Name))
   245  
   246  					Eventually(session).Should(Say(`%s\s+shared\s+http`, sharedDomain1.Name))
   247  					Eventually(session).Should(Say(`%s\s+shared\s+http`, sharedDomain2.Name))
   248  					Eventually(session).Should(Say(`%s\s+private\s+http`, privateDomain3.Name))
   249  					Eventually(session).Should(Exit(0))
   250  				})
   251  			})
   252  
   253  			When("logged in as a user that cannot see private domains", func() {
   254  				var userName string
   255  
   256  				BeforeEach(func() {
   257  					userName = helpers.SwitchToOrgRole(orgName, "BillingManager")
   258  					helpers.TargetOrg(orgName)
   259  				})
   260  
   261  				JustAfterEach(func() {
   262  					// waiting AfterEach blocks are designed to run in as admin
   263  					helpers.LoginCF()
   264  					helpers.TargetOrg(orgName)
   265  				})
   266  
   267  				It("only prints the shared domains", func() {
   268  					session := helpers.CF("domains")
   269  
   270  					Eventually(session).Should(Say(`Getting domains in org %s as %s`, orgName, userName))
   271  					Eventually(session).Should(Say(`name\s+availability\s+internal\s+protocols`))
   272  					Eventually(session).Should(Say(`%s\s+shared\s+http`, sharedDomain1.Name))
   273  					Eventually(session).Should(Say(`%s\s+shared\s+http`, sharedDomain2.Name))
   274  
   275  					Consistently(session).ShouldNot(Say(privateDomain1.Name))
   276  					Consistently(session).ShouldNot(Say(privateDomain2.Name))
   277  
   278  					Eventually(session).Should(Exit(0))
   279  				})
   280  			})
   281  		})
   282  	})
   283  })