diff --git a/e2e/landing.spec.js b/e2e/landing.spec.js index db1fd5d8..6610bae7 100644 --- a/e2e/landing.spec.js +++ b/e2e/landing.spec.js @@ -3,7 +3,7 @@ import { expect, test } from "@playwright/test"; test("landing page renders GitHub sign-in entrypoint", async ({ page }) => { await page.goto("/"); - await expect(page.getByRole("heading", { name: "DevTrack" })).toBeVisible(); + await expect(page.getByRole("heading", { name: "DevTrack", exact: true })).toBeVisible(); await expect( page.getByRole("link", { name: "Sign in with GitHub" }), ).toHaveAttribute("href", /\/api\/auth\/signin\/github\?callbackUrl=\/dashboard/); @@ -18,4 +18,4 @@ test("dashboard stays protected for unauthenticated users", async ({ page }) => await expect(page).toHaveURL(/\/$/); await expect(page.getByRole("link", { name: "Sign in with GitHub" })).toBeVisible(); -}); +}); \ No newline at end of file diff --git a/src/app/api/local-coding/sync/route.ts b/src/app/api/local-coding/sync/route.ts index 56df39a3..c1c22940 100644 --- a/src/app/api/local-coding/sync/route.ts +++ b/src/app/api/local-coding/sync/route.ts @@ -122,10 +122,12 @@ export async function POST(req: NextRequest) { project_count: session.projectCount || 0, })); - for (const record of records) { - await supabaseAdmin - .from("local_coding_sessions") - .upsert(record, { onConflict: "user_id,date" }); + const { error: upsertError } = await supabaseAdmin + .from("local_coding_sessions") + .upsert(records, { onConflict: "user_id,date" }); + + if (upsertError) { + return Response.json({ error: "Failed to sync sessions" }, { status: 500 }); } return Response.json({