github.com/clerkinc/clerk-sdk-go@v1.49.1/tests/integration/users_test.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package integration
     5  
     6  import (
     7  	"encoding/json"
     8  	"testing"
     9  
    10  	"github.com/clerkinc/clerk-sdk-go/clerk"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  type addressDetails struct {
    15  	Street string `json:"street"`
    16  	Number string `json:"number"`
    17  }
    18  
    19  type userAddress struct {
    20  	Address addressDetails `json:"address"`
    21  }
    22  
    23  type userAppAndContactID struct {
    24  	AppID     int `json:"app_id"`
    25  	ContactID int `json:"contact_id"`
    26  }
    27  
    28  type userEvent struct {
    29  	ViewedProfile bool `json:"viewed_profile"`
    30  }
    31  
    32  func TestUsers(t *testing.T) {
    33  	client := createClient()
    34  
    35  	users, err := client.Users().ListAll(clerk.ListAllUsersParams{})
    36  	if err != nil {
    37  		t.Fatalf("Users.ListAll returned error: %v", err)
    38  	}
    39  	if users == nil {
    40  		t.Fatalf("Users.ListAll returned nil")
    41  	}
    42  
    43  	userCount, err := client.Users().Count(clerk.ListAllUsersParams{})
    44  	if err != nil {
    45  		t.Fatalf("Users.Count returned error: %v", err)
    46  	}
    47  	if userCount.TotalCount == 0 {
    48  		t.Fatalf("Users.Count returned 0, expected %d", len(users))
    49  	}
    50  
    51  	for i, user := range users {
    52  		userId := user.ID
    53  		user, err := client.Users().Read(userId)
    54  		if err != nil {
    55  			t.Fatalf("Users.Read returned error: %v", err)
    56  		}
    57  		if user == nil {
    58  			t.Fatalf("Users.Read returned nil")
    59  		}
    60  
    61  		updateRequest := clerk.UpdateUser{
    62  			FirstName: user.FirstName,
    63  			LastName:  user.LastName,
    64  			PublicMetadata: userAddress{Address: addressDetails{
    65  				Street: "Fifth Avenue",
    66  				Number: "890",
    67  			}},
    68  			PrivateMetadata: userAppAndContactID{AppID: i},
    69  			UnsafeMetadata: userEvent{
    70  				ViewedProfile: true,
    71  			},
    72  		}
    73  		updatedUser, err := client.Users().Update(userId, &updateRequest)
    74  		if err != nil {
    75  			t.Fatalf("Users.Update returned error: %v", err)
    76  		}
    77  		if updatedUser == nil {
    78  			t.Errorf("Users.Update returned nil")
    79  		}
    80  
    81  		privateMetadata := userAppAndContactID{ContactID: i}
    82  		privateMetadataJSON, _ := json.Marshal(privateMetadata)
    83  
    84  		updatedUser, err = client.Users().UpdateMetadata(userId, &clerk.UpdateUserMetadata{
    85  			PrivateMetadata: privateMetadataJSON,
    86  		})
    87  		if err != nil {
    88  			t.Fatalf("Users.UpdateMetadata returned error: %v", err)
    89  		}
    90  		if updatedUser == nil {
    91  			t.Errorf("Users.UpdateMetadata returned nil")
    92  		}
    93  
    94  		updatedUser, err = client.Users().Ban(userId)
    95  		if err != nil {
    96  			t.Fatalf("Users.Ban returned error: %v", err)
    97  		}
    98  		assert.True(t, updatedUser.Banned)
    99  
   100  		updatedUser, err = client.Users().Unban(userId)
   101  		if err != nil {
   102  			t.Fatalf("Users.Unban returned error: %v", err)
   103  		}
   104  		assert.False(t, updatedUser.Banned)
   105  
   106  		updatedUser, err = client.Users().Lock(userId)
   107  		if err != nil {
   108  			t.Fatalf("Users.Lock returned error: %v", err)
   109  		}
   110  		assert.True(t, updatedUser.Locked)
   111  
   112  		updatedUser, err = client.Users().Unlock(userId)
   113  		if err != nil {
   114  			t.Fatalf("Users.Unlock returned error: %v", err)
   115  		}
   116  		assert.False(t, updatedUser.Locked)
   117  	}
   118  
   119  	// Should return all memberships of a user
   120  	newOrganization, err := client.Organizations().Create(clerk.CreateOrganizationParams{
   121  		Name:      "my-org",
   122  		CreatedBy: users[0].ID,
   123  	})
   124  	if err != nil {
   125  		t.Fatal(err)
   126  	}
   127  
   128  	organizationMemberships, err := client.Users().ListMemberships(clerk.ListMembershipsParams{UserID: users[0].ID})
   129  	assert.Equal(t, len(organizationMemberships.Data), 2)
   130  	assert.Equal(t, organizationMemberships.TotalCount, int64(2))
   131  	assert.Equal(t, newOrganization.ID, organizationMemberships.Data[0].Organization.ID)
   132  
   133  	// delete previous created organization to not create conflict with future tests
   134  	deleteResponse, err := client.Organizations().Delete(newOrganization.ID)
   135  	if err != nil {
   136  		t.Fatal(err)
   137  	}
   138  	assert.Equal(t, newOrganization.ID, deleteResponse.ID)
   139  }