Created
April 28, 2025 16:48
-
-
Save jasonLaster/272c4a49c9f488aa32fbeff5df2bd09b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/apps/web/playwright.config.ts b/apps/web/playwright.config.ts | |
index 688cde0..6a22247 100644 | |
--- a/apps/web/playwright.config.ts | |
+++ b/apps/web/playwright.config.ts | |
@@ -15,7 +15,7 @@ export default defineConfig({ | |
retries: process.env.CI ? 2 : 0, | |
workers: 1, | |
- reporter: process.env.CI ? "html" : "dot", | |
+ reporter: process.env.CI ? "html" : "line", | |
globalSetup: "./tests/global.setup.ts", | |
diff --git a/apps/web/tests/global.setup.ts b/apps/web/tests/global.setup.ts | |
index e5fe9d6..2fd034d 100644 | |
--- a/apps/web/tests/global.setup.ts | |
+++ b/apps/web/tests/global.setup.ts | |
@@ -1,8 +1,8 @@ | |
-import { clerkSetup } from "@clerk/testing/playwright"; | |
+import { clerkSetup, setupClerkTestingToken } from "@clerk/testing/playwright"; | |
// import { test as setup } from "@playwright/test"; | |
import { chromium } from "@playwright/test"; | |
-import { signin } from "./utils"; | |
+import { signin, createClerkSession } from "./utils"; | |
const port = process.env.PORT ? parseInt(process.env.PORT) : 3000; | |
const usePreviewUrl = !!process.env.PLAYWRIGHT_TEST_BASE_URL; | |
@@ -12,19 +12,35 @@ const baseURL = usePreviewUrl | |
: `http://localhost:${port}`; | |
export default async function globalSetup() { | |
+ console.log("globalSetup: Starting Clerk setup"); | |
await clerkSetup(); | |
+ console.log("globalSetup: Clerk setup complete"); | |
const browser = await chromium.launch(); | |
const page = await browser.newPage(); | |
- console.log("globalSetup: Signing in"); | |
- await signin(page, baseURL); | |
- | |
- await page.waitForURL(`${baseURL}/`); | |
+ // Use Clerk testing token utility to authenticate | |
+ await setupClerkTestingToken({ page }); | |
+ const { sessionToken } = await createClerkSession( | |
+ process.env.CLERK_TEST_USER_ID! | |
+ ); | |
+ | |
+ await page.context().addCookies([ | |
+ { | |
+ name: "__session", | |
+ value: sessionToken, | |
+ }, | |
+ ]); | |
+ | |
+ console.log("globalSetup: Clerk testing token setup complete"); | |
+ // Optionally, navigate to your app to ensure the session is loaded | |
+ await page.goto(baseURL); | |
+ console.log("globalSetup: Navigated to baseURL"); | |
+ // Save the authenticated storage state for all tests | |
await page | |
.context() | |
.storageState({ path: "playwright/.auth/storageState.json" }); | |
- console.log("globalSetup: Done signing in"); | |
+ console.log("globalSetup: Done signing in with Clerk testing token"); | |
await browser.close(); | |
} | |
diff --git a/apps/web/tests/upload.spec.ts b/apps/web/tests/upload.spec.ts | |
index 9aaa926..6d42991 100644 | |
--- a/apps/web/tests/upload.spec.ts | |
+++ b/apps/web/tests/upload.spec.ts | |
@@ -25,12 +25,6 @@ test("Uploading a PDF", async ({ page }) => { | |
.getByTestId("upload-loader") | |
.waitFor({ state: "hidden", timeout: 30_000 }); | |
- // Force a page reload to ensure the list updates | |
- console.log("Reloading page..."); | |
- await page.reload(); | |
- await page.waitForLoadState("domcontentloaded", { timeout: 15_000 }); | |
- console.log("Page reloaded."); | |
- | |
// Wait for the link count to increase by one after upload completes and refresh happens | |
await expect( | |
page.getByRole("link", { name: /yakima/i, exact: false }) | |
@@ -55,7 +49,6 @@ test("Uploading a PDF", async ({ page }) => { | |
await menuButton.click(); | |
// Find and click the delete button in the dropdown menu | |
- // Note: The delete button is likely added to the page body, not within the list item, so we select it globally | |
const deleteButton = page.locator( | |
'[data-testid="pdf-list-item-delete-button"]' | |
); | |
diff --git a/apps/web/tests/utils.ts b/apps/web/tests/utils.ts | |
index 4b66b2e..30b7e81 100644 | |
--- a/apps/web/tests/utils.ts | |
+++ b/apps/web/tests/utils.ts | |
@@ -82,3 +82,38 @@ export async function navigateToPdf(page: Page, name: string) { | |
return href; | |
} | |
+ | |
+export async function createClerkSession(userId: string) { | |
+ if (!userId) { | |
+ throw new Error("userId is required"); | |
+ } | |
+ | |
+ const apiContext = await request.newContext({ | |
+ baseURL: CLERK_API_URL, | |
+ extraHTTPHeaders: { | |
+ Authorization: `Bearer ${CLERK_API_KEY}`, | |
+ "Content-Type": "application/json", | |
+ }, | |
+ }); | |
+ | |
+ const response = await apiContext.post("/sessions", { | |
+ data: { | |
+ user_id: userId, | |
+ }, | |
+ }); | |
+ | |
+ let json; | |
+ try { | |
+ json = await response.json(); | |
+ } catch (err) { | |
+ const text = await response.text(); | |
+ console.error("Clerk session creation failed:", { | |
+ status: response.status(), | |
+ body: text, | |
+ }); | |
+ throw err; | |
+ } | |
+ | |
+ const { id, session_token } = json; | |
+ return { sessionId: id, sessionToken: session_token }; | |
+} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment