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  }