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  })