diff --git a/organization_invitation.go b/organization_invitation.go index f7c8916..b0198ea 100644 --- a/organization_invitation.go +++ b/organization_invitation.go @@ -22,6 +22,7 @@ type OrganizationInvitation struct { Status string `json:"status"` PublicMetadata json.RawMessage `json:"public_metadata"` PrivateMetadata json.RawMessage `json:"private_metadata"` + ExpiresAt *int64 `json:"expires_at,omitempty"` CreatedAt int64 `json:"created_at"` UpdatedAt int64 `json:"updated_at"` } diff --git a/organizationinvitation/client.go b/organizationinvitation/client.go index fdf949c..d2bfb7f 100644 --- a/organizationinvitation/client.go +++ b/organizationinvitation/client.go @@ -34,6 +34,7 @@ type CreateParams struct { PublicMetadata *json.RawMessage `json:"public_metadata,omitempty"` PrivateMetadata *json.RawMessage `json:"private_metadata,omitempty"` OrganizationID string `json:"-"` + ExpiresInDays *int64 `json:"expires_in_days,omitempty"` } // Create creates and sends an invitation to join an organization. diff --git a/organizationinvitation/client_test.go b/organizationinvitation/client_test.go index 62450f4..cd5edc1 100644 --- a/organizationinvitation/client_test.go +++ b/organizationinvitation/client_test.go @@ -22,8 +22,8 @@ func TestOrganizationInvitationClientCreate(t *testing.T) { config.HTTPClient = &http.Client{ Transport: &clerktest.RoundTripper{ T: t, - In: json.RawMessage(fmt.Sprintf(`{"email_address":"%s"}`, emailAddress)), - Out: json.RawMessage(fmt.Sprintf(`{"id":"%s","email_address":"%s","organization_id":"%s"}`, id, emailAddress, organizationID)), + In: json.RawMessage(fmt.Sprintf(`{"email_address":"%s", "expires_in_days": 1}`, emailAddress)), + Out: json.RawMessage(fmt.Sprintf(`{"id":"%s","email_address":"%s","organization_id":"%s", "expires_at": 1}`, id, emailAddress, organizationID)), Method: http.MethodPost, Path: "/v1/organizations/" + organizationID + "/invitations", }, @@ -32,11 +32,13 @@ func TestOrganizationInvitationClientCreate(t *testing.T) { invitation, err := client.Create(context.Background(), &CreateParams{ OrganizationID: organizationID, EmailAddress: clerk.String(emailAddress), + ExpiresInDays: clerk.Int64(1), }) require.NoError(t, err) require.Equal(t, id, invitation.ID) require.Equal(t, organizationID, invitation.OrganizationID) require.Equal(t, emailAddress, invitation.EmailAddress) + require.Equal(t, int64(1), *invitation.ExpiresAt) } func TestOrganizationInvitationClientCreate_Error(t *testing.T) { @@ -74,7 +76,7 @@ func TestOrganizationInvitationClientList(t *testing.T) { config.HTTPClient = &http.Client{ Transport: &clerktest.RoundTripper{ T: t, - Out: json.RawMessage(fmt.Sprintf(`{"data":[{"id":"%s","object":"organization_invitation","email_address":"string","role":"string","organization_id":"%s","status":"string","public_metadata":{},"private_metadata":{},"created_at":0,"updated_at":0}],"total_count":1}`, id, organizationID)), + Out: json.RawMessage(fmt.Sprintf(`{"data":[{"id":"%s","object":"organization_invitation","email_address":"string","role":"string","organization_id":"%s","status":"string","public_metadata":{},"private_metadata":{},"expires_at":1,"created_at":0,"updated_at":0}],"total_count":1}`, id, organizationID)), Method: http.MethodGet, Path: "/v1/organizations/" + organizationID + "/invitations", Query: &url.Values{ @@ -95,6 +97,7 @@ func TestOrganizationInvitationClientList(t *testing.T) { require.Len(t, response.OrganizationInvitations, 1) require.Equal(t, id, response.OrganizationInvitations[0].ID) require.Equal(t, organizationID, response.OrganizationInvitations[0].OrganizationID) + require.Equal(t, int64(1), *response.OrganizationInvitations[0].ExpiresAt) require.Equal(t, int64(1), response.TotalCount) } @@ -131,7 +134,7 @@ func TestOrganizationInvitationClientGet(t *testing.T) { config.HTTPClient = &http.Client{ Transport: &clerktest.RoundTripper{ T: t, - Out: json.RawMessage(fmt.Sprintf(`{"id":"%s","object":"organization_invitation","email_address":"string","role":"string","role_name":"string","organization_id":"%s","status":"string","public_metadata":{},"private_metadata":{},"created_at":0,"updated_at":0}`, id, organizationID)), + Out: json.RawMessage(fmt.Sprintf(`{"id":"%s","object":"organization_invitation","email_address":"string","role":"string","role_name":"string","organization_id":"%s","status":"string","public_metadata":{},"private_metadata":{},"expires_at": 1,"created_at":0,"updated_at":0}`, id, organizationID)), Method: http.MethodGet, Path: "/v1/organizations/" + organizationID + "/invitations/" + id, }, @@ -146,6 +149,7 @@ func TestOrganizationInvitationClientGet(t *testing.T) { require.Equal(t, organizationID, response.OrganizationID) require.Equal(t, "string", response.RoleName) require.Equal(t, "string", response.Role) + require.Equal(t, int64(1), *response.ExpiresAt) } func TestOrganizationInvitationClientGet_Error(t *testing.T) {