github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v7action/user_test.go (about)

     1  package v7action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     8  
     9  	. "code.cloudfoundry.org/cli/actor/v7action"
    10  	"code.cloudfoundry.org/cli/actor/v7action/v7actionfakes"
    11  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    12  	"code.cloudfoundry.org/cli/api/uaa"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  )
    16  
    17  var _ = Describe("User Actions", func() {
    18  	var (
    19  		actor                     *Actor
    20  		fakeUAAClient             *v7actionfakes.FakeUAAClient
    21  		fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient
    22  	)
    23  
    24  	BeforeEach(func() {
    25  		fakeUAAClient = new(v7actionfakes.FakeUAAClient)
    26  		fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient)
    27  		fakeConfig := new(v7actionfakes.FakeConfig)
    28  		actor = NewActor(fakeCloudControllerClient, fakeConfig, nil, fakeUAAClient, nil)
    29  	})
    30  
    31  	Describe("CreateUser", func() {
    32  		var (
    33  			actualUser     User
    34  			actualWarnings Warnings
    35  			actualErr      error
    36  		)
    37  
    38  		JustBeforeEach(func() {
    39  			actualUser, actualWarnings, actualErr = actor.CreateUser("some-new-user", "some-password", "some-origin")
    40  		})
    41  
    42  		When("no API errors occur", func() {
    43  			var createdUser ccv3.User
    44  
    45  			BeforeEach(func() {
    46  				createdUser = ccv3.User{
    47  					GUID: "new-user-cc-guid",
    48  				}
    49  				fakeUAAClient.CreateUserReturns(
    50  					uaa.User{
    51  						ID: "new-user-uaa-id",
    52  					},
    53  					nil,
    54  				)
    55  				fakeCloudControllerClient.CreateUserReturns(
    56  					createdUser,
    57  					ccv3.Warnings{
    58  						"warning-1",
    59  						"warning-2",
    60  					},
    61  					nil,
    62  				)
    63  			})
    64  
    65  			It("creates a new user and returns all warnings", func() {
    66  				Expect(actualErr).NotTo(HaveOccurred())
    67  
    68  				Expect(actualUser).To(Equal(User(createdUser)))
    69  				Expect(actualWarnings).To(ConsistOf("warning-1", "warning-2"))
    70  
    71  				Expect(fakeUAAClient.CreateUserCallCount()).To(Equal(1))
    72  				username, password, origin := fakeUAAClient.CreateUserArgsForCall(0)
    73  				Expect(username).To(Equal("some-new-user"))
    74  				Expect(password).To(Equal("some-password"))
    75  				Expect(origin).To(Equal("some-origin"))
    76  
    77  				Expect(fakeCloudControllerClient.CreateUserCallCount()).To(Equal(1))
    78  				uaaUserID := fakeCloudControllerClient.CreateUserArgsForCall(0)
    79  				Expect(uaaUserID).To(Equal("new-user-uaa-id"))
    80  			})
    81  		})
    82  
    83  		When("the UAA API returns an error", func() {
    84  			var returnedErr error
    85  
    86  			BeforeEach(func() {
    87  				returnedErr = errors.New("some UAA error")
    88  				fakeUAAClient.CreateUserReturns(
    89  					uaa.User{
    90  						ID: "new-user-uaa-id",
    91  					},
    92  					returnedErr,
    93  				)
    94  			})
    95  
    96  			It("returns the same error", func() {
    97  				Expect(actualErr).To(MatchError(returnedErr))
    98  			})
    99  		})
   100  
   101  		When("the CC API returns an error", func() {
   102  			var returnedErr error
   103  
   104  			BeforeEach(func() {
   105  				returnedErr = errors.New("CC error")
   106  				fakeUAAClient.CreateUserReturns(
   107  					uaa.User{
   108  						ID: "new-user-uaa-id",
   109  					},
   110  					nil,
   111  				)
   112  				fakeCloudControllerClient.CreateUserReturns(
   113  					ccv3.User{},
   114  					ccv3.Warnings{
   115  						"warning-1",
   116  						"warning-2",
   117  					},
   118  					returnedErr,
   119  				)
   120  			})
   121  
   122  			It("returns the same error and all warnings", func() {
   123  				Expect(actualErr).To(MatchError(returnedErr))
   124  				Expect(actualWarnings).To(ConsistOf("warning-1", "warning-2"))
   125  			})
   126  		})
   127  	})
   128  
   129  	Describe("GetUser", func() {
   130  		var (
   131  			actualUser User
   132  			actualErr  error
   133  		)
   134  
   135  		JustBeforeEach(func() {
   136  			actualUser, actualErr = actor.GetUser("some-user", "some-origin")
   137  		})
   138  
   139  		When("when the API returns a success response", func() {
   140  			When("the API returns one user", func() {
   141  				BeforeEach(func() {
   142  
   143  					fakeUAAClient.ListUsersReturns(
   144  						[]uaa.User{
   145  							{ID: "user-id"},
   146  						},
   147  						nil,
   148  					)
   149  				})
   150  
   151  				It("returns the single user", func() {
   152  					Expect(actualErr).NotTo(HaveOccurred())
   153  					Expect(actualUser).To(Equal(User{GUID: "user-id"}))
   154  
   155  					Expect(fakeUAAClient.ListUsersCallCount()).To(Equal(1))
   156  					username, origin := fakeUAAClient.ListUsersArgsForCall(0)
   157  					Expect(username).To(Equal("some-user"))
   158  					Expect(origin).To(Equal("some-origin"))
   159  				})
   160  			})
   161  
   162  			When("the API returns no user", func() {
   163  				BeforeEach(func() {
   164  					fakeUAAClient.ListUsersReturns(
   165  						[]uaa.User{},
   166  						nil,
   167  					)
   168  				})
   169  
   170  				It("returns an error indicating user was not found in UAA", func() {
   171  					Expect(actualUser).To(Equal(User{}))
   172  					Expect(actualErr).To(Equal(actionerror.UserNotFoundError{
   173  						Username: "some-user",
   174  						Origin:   "some-origin",
   175  					}))
   176  					Expect(fakeUAAClient.ListUsersCallCount()).To(Equal(1))
   177  				})
   178  			})
   179  
   180  			When("the API returns multiple users", func() {
   181  				BeforeEach(func() {
   182  					fakeUAAClient.ListUsersReturns(
   183  						[]uaa.User{
   184  							{ID: "user-guid-1", Origin: "uaa"},
   185  							{ID: "user-guid-2", Origin: "ldap"},
   186  						},
   187  						nil,
   188  					)
   189  				})
   190  
   191  				It("returns an error indicating user was not found in UAA", func() {
   192  					Expect(actualUser).To(Equal(User{}))
   193  					Expect(actualErr).To(Equal(actionerror.MultipleUAAUsersFoundError{
   194  						Username: "some-user",
   195  						Origins:  []string{"uaa", "ldap"},
   196  					}))
   197  					Expect(fakeUAAClient.ListUsersCallCount()).To(Equal(1))
   198  				})
   199  			})
   200  		})
   201  
   202  		When("the API returns an error", func() {
   203  			var apiError error
   204  
   205  			BeforeEach(func() {
   206  				apiError = errors.New("uaa-api-get-users-error")
   207  				fakeUAAClient.ListUsersReturns(
   208  					nil,
   209  					apiError,
   210  				)
   211  			})
   212  
   213  			It("returns error coming from the API", func() {
   214  				Expect(actualUser).To(Equal(User{}))
   215  				Expect(actualErr).To(MatchError("uaa-api-get-users-error"))
   216  
   217  				Expect(fakeUAAClient.ListUsersCallCount()).To(Equal(1))
   218  			})
   219  		})
   220  	})
   221  
   222  	Describe("DeleteUser", func() {
   223  		var (
   224  			actualWarnings Warnings
   225  			actualErr      error
   226  		)
   227  
   228  		JustBeforeEach(func() {
   229  			actualWarnings, actualErr = actor.DeleteUser("some-user-guid")
   230  		})
   231  
   232  		When("the UAA API returns an error", func() {
   233  			var returnedErr error
   234  
   235  			BeforeEach(func() {
   236  				returnedErr = errors.New("some UAA error")
   237  				fakeUAAClient.DeleteUserReturns(
   238  					uaa.User{},
   239  					returnedErr,
   240  				)
   241  			})
   242  
   243  			It("returns the same error", func() {
   244  				Expect(actualErr).To(MatchError(returnedErr))
   245  			})
   246  		})
   247  
   248  		When("the CC API returns an error", func() {
   249  			var returnedErr error
   250  
   251  			BeforeEach(func() {
   252  				returnedErr = errors.New("some CC error")
   253  				fakeUAAClient.DeleteUserReturns(
   254  					uaa.User{},
   255  					nil,
   256  				)
   257  				fakeCloudControllerClient.DeleteUserReturns(
   258  					"",
   259  					ccv3.Warnings{},
   260  					returnedErr,
   261  				)
   262  			})
   263  
   264  			It("returns the same error", func() {
   265  				Expect(actualErr).To(MatchError(returnedErr))
   266  			})
   267  
   268  			When("the cloud controller found no user", func() {
   269  				BeforeEach(func() {
   270  					returnedErr = ccerror.ResourceNotFoundError{}
   271  					fakeUAAClient.DeleteUserReturns(
   272  						uaa.User{},
   273  						nil,
   274  					)
   275  					fakeCloudControllerClient.DeleteUserReturns(
   276  						"",
   277  						ccv3.Warnings{},
   278  						returnedErr,
   279  					)
   280  				})
   281  
   282  				It("does Not return the error", func() {
   283  					Expect(actualErr).To(BeNil())
   284  				})
   285  			})
   286  		})
   287  
   288  		When("the CC API returns a job", func() {
   289  			BeforeEach(func() {
   290  				fakeCloudControllerClient.DeleteUserReturns(
   291  					"some-url",
   292  					ccv3.Warnings{"warning-5", "warning-6"},
   293  					nil,
   294  				)
   295  			})
   296  
   297  			When("polling errors", func() {
   298  				var expectedErr error
   299  
   300  				BeforeEach(func() {
   301  					expectedErr = errors.New("Never expected, by anyone")
   302  					fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"warning-7", "warning-8"}, expectedErr)
   303  				})
   304  
   305  				It("returns the error", func() {
   306  					Expect(actualErr).To(Equal(expectedErr))
   307  					Expect(actualWarnings).To(ConsistOf("warning-5", "warning-6", "warning-7", "warning-8"))
   308  				})
   309  			})
   310  
   311  			When("the job is successful", func() {
   312  				BeforeEach(func() {
   313  					fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"warning-7", "warning-8"}, nil)
   314  				})
   315  
   316  				It("returns warnings and no error", func() {
   317  					Expect(actualErr).ToNot(HaveOccurred())
   318  					Expect(actualWarnings).To(ConsistOf("warning-5", "warning-6", "warning-7", "warning-8"))
   319  
   320  					Expect(fakeCloudControllerClient.DeleteUserCallCount()).To(Equal(1))
   321  					Expect(fakeCloudControllerClient.DeleteUserArgsForCall(0)).To(Equal("some-user-guid"))
   322  
   323  					Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1))
   324  					Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(Equal(ccv3.JobURL("some-url")))
   325  				})
   326  			})
   327  		})
   328  
   329  	})
   330  
   331  	Describe("SortUsers", func() {
   332  		var (
   333  			users []User
   334  		)
   335  		When("The PresentationNames are different", func() {
   336  			BeforeEach(func() {
   337  				users = []User{
   338  					{PresentationName: "c", Origin: "uaa"},
   339  					{PresentationName: "a", Origin: "uaa"},
   340  					{PresentationName: "b", Origin: "ldap"},
   341  				}
   342  			})
   343  			It("sorts by PresentationName", func() {
   344  				SortUsers(users)
   345  				Expect(users[0].PresentationName).To(Equal("a"))
   346  				Expect(users[1].PresentationName).To(Equal("b"))
   347  				Expect(users[2].PresentationName).To(Equal("c"))
   348  			})
   349  		})
   350  		When("The PresentationNames are identical", func() {
   351  			BeforeEach(func() {
   352  				users = []User{
   353  					{PresentationName: "a", Origin: "cc"},
   354  					{PresentationName: "a", Origin: "aa"},
   355  					{PresentationName: "a", Origin: "bb"},
   356  					{PresentationName: "a", Origin: "uaa"},
   357  					{PresentationName: "a", Origin: "zz"},
   358  					{PresentationName: "a", Origin: ""},
   359  				}
   360  			})
   361  			It("sorts by PresentationName, uaa first, clients (origin == '') last and alphabetically otherwise", func() {
   362  				SortUsers(users)
   363  				Expect(users[0].Origin).To(Equal("uaa"))
   364  				Expect(users[1].Origin).To(Equal("aa"))
   365  				Expect(users[2].Origin).To(Equal("bb"))
   366  				Expect(users[3].Origin).To(Equal("cc"))
   367  				Expect(users[4].Origin).To(Equal("zz"))
   368  				Expect(users[5].Origin).To(Equal(""))
   369  			})
   370  		})
   371  	})
   372  
   373  	Describe("GetHumanReadableOrigin", func() {
   374  		var user User
   375  		When("The user has an origin", func() {
   376  			BeforeEach(func() {
   377  				user = User{Origin: "some-origin"}
   378  			})
   379  			It("displays the origin", func() {
   380  				Expect(GetHumanReadableOrigin(user)).To(Equal("some-origin"))
   381  			})
   382  		})
   383  		When("The user has an empty origin", func() {
   384  			BeforeEach(func() {
   385  				user = User{Origin: ""}
   386  			})
   387  			It("displays 'client'", func() {
   388  				Expect(GetHumanReadableOrigin(user)).To(Equal("client"))
   389  			})
   390  		})
   391  	})
   392  })