From e3cf1c7e486303cfaccb8eaad672c9a1ad7abac9 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 29 May 2026 06:57:08 +0000 Subject: [PATCH] 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 Co-authored-by: Bryan FRIMIN --- pkg/accessreview/drivers/clerk_test.go | 24 ++----------- pkg/accessreview/drivers/testdata/clerk.yaml | 37 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 pkg/accessreview/drivers/testdata/clerk.yaml diff --git a/pkg/accessreview/drivers/clerk_test.go b/pkg/accessreview/drivers/clerk_test.go index 2f4d4550b..de71ebdee 100644 --- a/pkg/accessreview/drivers/clerk_test.go +++ b/pkg/accessreview/drivers/clerk_test.go @@ -16,9 +16,7 @@ package drivers import ( "context" - "io" - "net/http" - "strings" + "os" "testing" "github.com/stretchr/testify/assert" @@ -29,29 +27,13 @@ import ( func TestClerkDriver(t *testing.T) { 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}` - - 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 - })} + rec := newRecorder(t, "testdata/clerk", "CLERK_SECRET_KEY") + client := newVCRClient(rec, bearerAuth(os.Getenv("CLERK_SECRET_KEY"))) driver := NewClerkDriver(client) records, err := driver.ListAccounts(context.Background()) require.NoError(t, err) require.Len(t, records, 3) - require.Equal(t, 1, requestCount) first := records[0] assert.Equal(t, "usr_000000000000000000000001", first.ExternalID) diff --git a/pkg/accessreview/drivers/testdata/clerk.yaml b/pkg/accessreview/drivers/testdata/clerk.yaml new file mode 100644 index 000000000..d6acf2993 --- /dev/null +++ b/pkg/accessreview/drivers/testdata/clerk.yaml @@ -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