github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/openstack/identity/v3/users/testing/requests_test.go (about) 1 package testing 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/groups" 8 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/projects" 9 "github.com/vnpaycloud-console/gophercloud/v2/openstack/identity/v3/users" 10 "github.com/vnpaycloud-console/gophercloud/v2/pagination" 11 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 12 "github.com/vnpaycloud-console/gophercloud/v2/testhelper/client" 13 ) 14 15 func TestListUsers(t *testing.T) { 16 th.SetupHTTP() 17 defer th.TeardownHTTP() 18 HandleListUsersSuccessfully(t) 19 20 count := 0 21 err := users.List(client.ServiceClient(), nil).EachPage(context.TODO(), func(_ context.Context, page pagination.Page) (bool, error) { 22 count++ 23 24 actual, err := users.ExtractUsers(page) 25 th.AssertNoErr(t, err) 26 27 th.CheckDeepEquals(t, ExpectedUsersSlice, actual) 28 29 return true, nil 30 }) 31 th.AssertNoErr(t, err) 32 th.CheckEquals(t, count, 1) 33 } 34 35 func TestListUsersAllPages(t *testing.T) { 36 th.SetupHTTP() 37 defer th.TeardownHTTP() 38 HandleListUsersSuccessfully(t) 39 40 allPages, err := users.List(client.ServiceClient(), nil).AllPages(context.TODO()) 41 th.AssertNoErr(t, err) 42 actual, err := users.ExtractUsers(allPages) 43 th.AssertNoErr(t, err) 44 th.CheckDeepEquals(t, ExpectedUsersSlice, actual) 45 th.AssertEquals(t, ExpectedUsersSlice[0].Extra["email"], "glance@localhost") 46 th.AssertEquals(t, ExpectedUsersSlice[1].Extra["email"], "jsmith@example.com") 47 } 48 49 func TestListUsersFiltersCheck(t *testing.T) { 50 type test struct { 51 filterName string 52 wantErr bool 53 } 54 tests := []test{ 55 {"foo__contains", false}, 56 {"foo", true}, 57 {"foo_contains", true}, 58 {"foo__", true}, 59 {"__foo", true}, 60 } 61 62 var listOpts users.ListOpts 63 for _, _test := range tests { 64 listOpts.Filters = map[string]string{_test.filterName: "bar"} 65 _, err := listOpts.ToUserListQuery() 66 67 if !_test.wantErr { 68 th.AssertNoErr(t, err) 69 } else { 70 switch _t := err.(type) { 71 case nil: 72 t.Fatal("error expected but got a nil") 73 case users.InvalidListFilter: 74 default: 75 t.Fatalf("unexpected error type: [%T]", _t) 76 } 77 } 78 } 79 } 80 81 func TestGetUser(t *testing.T) { 82 th.SetupHTTP() 83 defer th.TeardownHTTP() 84 HandleGetUserSuccessfully(t) 85 86 actual, err := users.Get(context.TODO(), client.ServiceClient(), "9fe1d3").Extract() 87 th.AssertNoErr(t, err) 88 th.CheckDeepEquals(t, SecondUser, *actual) 89 th.AssertEquals(t, SecondUser.Extra["email"], "jsmith@example.com") 90 } 91 92 func TestCreateUser(t *testing.T) { 93 th.SetupHTTP() 94 defer th.TeardownHTTP() 95 HandleCreateUserSuccessfully(t) 96 97 iTrue := true 98 createOpts := users.CreateOpts{ 99 Name: "jsmith", 100 DomainID: "1789d1", 101 Enabled: &iTrue, 102 Password: "secretsecret", 103 DefaultProjectID: "263fd9", 104 Options: map[users.Option]any{ 105 users.IgnorePasswordExpiry: true, 106 users.MultiFactorAuthRules: []any{ 107 []string{"password", "totp"}, 108 []string{"password", "custom-auth-method"}, 109 }, 110 }, 111 Extra: map[string]any{ 112 "email": "jsmith@example.com", 113 }, 114 } 115 116 actual, err := users.Create(context.TODO(), client.ServiceClient(), createOpts).Extract() 117 th.AssertNoErr(t, err) 118 th.CheckDeepEquals(t, SecondUser, *actual) 119 } 120 121 func TestCreateNoOptionsUser(t *testing.T) { 122 th.SetupHTTP() 123 defer th.TeardownHTTP() 124 HandleCreateNoOptionsUserSuccessfully(t) 125 126 iTrue := true 127 createOpts := users.CreateOpts{ 128 Name: "jsmith", 129 DomainID: "1789d1", 130 Enabled: &iTrue, 131 Password: "secretsecret", 132 DefaultProjectID: "263fd9", 133 Extra: map[string]any{ 134 "email": "jsmith@example.com", 135 }, 136 } 137 138 actual, err := users.Create(context.TODO(), client.ServiceClient(), createOpts).Extract() 139 th.AssertNoErr(t, err) 140 th.CheckDeepEquals(t, SecondUserNoOptions, *actual) 141 } 142 143 func TestUpdateUser(t *testing.T) { 144 th.SetupHTTP() 145 defer th.TeardownHTTP() 146 HandleUpdateUserSuccessfully(t) 147 148 iFalse := false 149 updateOpts := users.UpdateOpts{ 150 Enabled: &iFalse, 151 Options: map[users.Option]any{ 152 users.MultiFactorAuthRules: nil, 153 }, 154 Extra: map[string]any{ 155 "disabled_reason": "DDOS", 156 }, 157 } 158 159 actual, err := users.Update(context.TODO(), client.ServiceClient(), "9fe1d3", updateOpts).Extract() 160 th.AssertNoErr(t, err) 161 th.CheckDeepEquals(t, SecondUserUpdated, *actual) 162 } 163 164 func TestChangeUserPassword(t *testing.T) { 165 th.SetupHTTP() 166 defer th.TeardownHTTP() 167 HandleChangeUserPasswordSuccessfully(t) 168 169 changePasswordOpts := users.ChangePasswordOpts{ 170 OriginalPassword: "secretsecret", 171 Password: "new_secretsecret", 172 } 173 174 res := users.ChangePassword(context.TODO(), client.ServiceClient(), "9fe1d3", changePasswordOpts) 175 th.AssertNoErr(t, res.Err) 176 } 177 178 func TestDeleteUser(t *testing.T) { 179 th.SetupHTTP() 180 defer th.TeardownHTTP() 181 HandleDeleteUserSuccessfully(t) 182 183 res := users.Delete(context.TODO(), client.ServiceClient(), "9fe1d3") 184 th.AssertNoErr(t, res.Err) 185 } 186 187 func TestListUserGroups(t *testing.T) { 188 th.SetupHTTP() 189 defer th.TeardownHTTP() 190 HandleListUserGroupsSuccessfully(t) 191 allPages, err := users.ListGroups(client.ServiceClient(), "9fe1d3").AllPages(context.TODO()) 192 th.AssertNoErr(t, err) 193 actual, err := groups.ExtractGroups(allPages) 194 th.AssertNoErr(t, err) 195 th.CheckDeepEquals(t, ExpectedGroupsSlice, actual) 196 } 197 198 func TestAddToGroup(t *testing.T) { 199 th.SetupHTTP() 200 defer th.TeardownHTTP() 201 HandleAddToGroupSuccessfully(t) 202 res := users.AddToGroup(context.TODO(), client.ServiceClient(), "ea167b", "9fe1d3") 203 th.AssertNoErr(t, res.Err) 204 } 205 206 func TestIsMemberOfGroup(t *testing.T) { 207 th.SetupHTTP() 208 defer th.TeardownHTTP() 209 HandleIsMemberOfGroupSuccessfully(t) 210 ok, err := users.IsMemberOfGroup(context.TODO(), client.ServiceClient(), "ea167b", "9fe1d3").Extract() 211 th.AssertNoErr(t, err) 212 th.AssertEquals(t, true, ok) 213 } 214 215 func TestRemoveFromGroup(t *testing.T) { 216 th.SetupHTTP() 217 defer th.TeardownHTTP() 218 HandleRemoveFromGroupSuccessfully(t) 219 res := users.RemoveFromGroup(context.TODO(), client.ServiceClient(), "ea167b", "9fe1d3") 220 th.AssertNoErr(t, res.Err) 221 } 222 223 func TestListUserProjects(t *testing.T) { 224 th.SetupHTTP() 225 defer th.TeardownHTTP() 226 HandleListUserProjectsSuccessfully(t) 227 allPages, err := users.ListProjects(client.ServiceClient(), "9fe1d3").AllPages(context.TODO()) 228 th.AssertNoErr(t, err) 229 actual, err := projects.ExtractProjects(allPages) 230 th.AssertNoErr(t, err) 231 th.CheckDeepEquals(t, ExpectedProjectsSlice, actual) 232 } 233 234 func TestListInGroup(t *testing.T) { 235 th.SetupHTTP() 236 defer th.TeardownHTTP() 237 HandleListInGroupSuccessfully(t) 238 239 iTrue := true 240 listOpts := users.ListOpts{ 241 Enabled: &iTrue, 242 } 243 244 allPages, err := users.ListInGroup(client.ServiceClient(), "ea167b", listOpts).AllPages(context.TODO()) 245 th.AssertNoErr(t, err) 246 actual, err := users.ExtractUsers(allPages) 247 th.AssertNoErr(t, err) 248 th.CheckDeepEquals(t, ExpectedUsersSlice, actual) 249 }