Use cassette replay for Clerk driver test
Align the Clerk driver tests with the rest of the access-review\ndriver suite by exercising VCR cassette replay instead of a\ncustom transport stub.\n\nThis keeps test coverage consistent with existing providers and\nensures request matching behavior is validated against a checked-in\nfixture. Signed-off-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Bryan FRIMIN <bryan@frimin.fr>
This commit is contained in:
committed by
Aurélien Sibiril
parent
432a5bf82e
commit
e3cf1c7e48
@@ -16,9 +16,7 @@ package drivers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"os"
|
||||||
"net/http"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
@@ -29,29 +27,13 @@ import (
|
|||||||
func TestClerkDriver(t *testing.T) {
|
func TestClerkDriver(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
const responseBody = `{"data":[{"id":"usr_000000000000000000000001","primary_email_address_id":"eml_primary_1","username":null,"first_name":"Jane","last_name":"Doe","password_enabled":true,"two_factor_enabled":false,"totp_enabled":false,"backup_code_enabled":false,"banned":false,"locked":false,"last_sign_in_at":1748471521000,"created_at":1748342000000,"email_addresses":[{"id":"eml_secondary_1","email_address":"jane+alt@example.com"},{"id":"eml_primary_1","email_address":"jane@example.com"}]},{"id":"usr_000000000000000000000002","primary_email_address_id":null,"username":"developer-user","first_name":null,"last_name":null,"password_enabled":false,"two_factor_enabled":true,"totp_enabled":false,"backup_code_enabled":false,"banned":false,"locked":false,"last_sign_in_at":null,"created_at":1748343000000,"email_addresses":[{"id":"eml_2","email_address":"developer@example.com"}]},{"id":"usr_000000000000000000000003","primary_email_address_id":"eml_primary_3","username":null,"first_name":null,"last_name":null,"password_enabled":false,"two_factor_enabled":false,"totp_enabled":false,"backup_code_enabled":false,"banned":true,"locked":false,"last_sign_in_at":null,"created_at":1748344000000,"email_addresses":[{"id":"eml_primary_3","email_address":"blocked@example.com"}]}],"total_count":3}`
|
rec := newRecorder(t, "testdata/clerk", "CLERK_SECRET_KEY")
|
||||||
|
client := newVCRClient(rec, bearerAuth(os.Getenv("CLERK_SECRET_KEY")))
|
||||||
requestCount := 0
|
|
||||||
client := &http.Client{Transport: roundTripFunc(func(req *http.Request) (*http.Response, error) {
|
|
||||||
requestCount++
|
|
||||||
require.Equal(t, http.MethodGet, req.Method)
|
|
||||||
require.Equal(t, "https://api.clerk.com/v1/users?limit=100&offset=0", req.URL.String())
|
|
||||||
require.Equal(t, "application/json", req.Header.Get("Accept"))
|
|
||||||
|
|
||||||
return &http.Response{
|
|
||||||
StatusCode: http.StatusOK,
|
|
||||||
Header: http.Header{
|
|
||||||
"Content-Type": []string{"application/json"},
|
|
||||||
},
|
|
||||||
Body: io.NopCloser(strings.NewReader(responseBody)),
|
|
||||||
}, nil
|
|
||||||
})}
|
|
||||||
|
|
||||||
driver := NewClerkDriver(client)
|
driver := NewClerkDriver(client)
|
||||||
records, err := driver.ListAccounts(context.Background())
|
records, err := driver.ListAccounts(context.Background())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, records, 3)
|
require.Len(t, records, 3)
|
||||||
require.Equal(t, 1, requestCount)
|
|
||||||
|
|
||||||
first := records[0]
|
first := records[0]
|
||||||
assert.Equal(t, "usr_000000000000000000000001", first.ExternalID)
|
assert.Equal(t, "usr_000000000000000000000001", first.ExternalID)
|
||||||
|
|||||||
37
pkg/accessreview/drivers/testdata/clerk.yaml
vendored
Normal file
37
pkg/accessreview/drivers/testdata/clerk.yaml
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
version: 2
|
||||||
|
interactions:
|
||||||
|
- id: 0
|
||||||
|
request:
|
||||||
|
proto: HTTP/1.1
|
||||||
|
proto_major: 1
|
||||||
|
proto_minor: 1
|
||||||
|
content_length: 0
|
||||||
|
host: api.clerk.com
|
||||||
|
form:
|
||||||
|
limit:
|
||||||
|
- "100"
|
||||||
|
offset:
|
||||||
|
- "0"
|
||||||
|
headers:
|
||||||
|
Accept:
|
||||||
|
- application/json
|
||||||
|
url: https://api.clerk.com/v1/users?limit=100&offset=0
|
||||||
|
method: GET
|
||||||
|
response:
|
||||||
|
proto: HTTP/2.0
|
||||||
|
proto_major: 2
|
||||||
|
proto_minor: 0
|
||||||
|
content_length: -1
|
||||||
|
uncompressed: true
|
||||||
|
body: '{"data":[{"id":"usr_000000000000000000000001","primary_email_address_id":"eml_primary_1","username":null,"first_name":"Jane","last_name":"Doe","password_enabled":true,"two_factor_enabled":false,"totp_enabled":false,"backup_code_enabled":false,"banned":false,"locked":false,"last_sign_in_at":1748471521000,"created_at":1748342000000,"email_addresses":[{"id":"eml_secondary_1","email_address":"jane+alt@example.com"},{"id":"eml_primary_1","email_address":"jane@example.com"}]},{"id":"usr_000000000000000000000002","primary_email_address_id":null,"username":"developer-user","first_name":null,"last_name":null,"password_enabled":false,"two_factor_enabled":true,"totp_enabled":false,"backup_code_enabled":false,"banned":false,"locked":false,"last_sign_in_at":null,"created_at":1748343000000,"email_addresses":[{"id":"eml_2","email_address":"developer@example.com"}]},{"id":"usr_000000000000000000000003","primary_email_address_id":"eml_primary_3","username":null,"first_name":null,"last_name":null,"password_enabled":false,"two_factor_enabled":false,"totp_enabled":false,"backup_code_enabled":false,"banned":true,"locked":false,"last_sign_in_at":null,"created_at":1748344000000,"email_addresses":[{"id":"eml_primary_3","email_address":"blocked@example.com"}]}],"total_count":3}'
|
||||||
|
headers:
|
||||||
|
Content-Type:
|
||||||
|
- application/json
|
||||||
|
Date:
|
||||||
|
- Fri, 29 May 2026 03:30:00 GMT
|
||||||
|
Server:
|
||||||
|
- cloudflare
|
||||||
|
status: 200 OK
|
||||||
|
code: 200
|
||||||
|
duration: 120.5ms
|
||||||
Reference in New Issue
Block a user