From 5bac40681d1ba5d4419dd9cc14cd9085a02c948e Mon Sep 17 00:00:00 2001 From: Jota Date: Wed, 18 Jun 2025 22:17:48 -0500 Subject: [PATCH 1/3] test: add end-to-end login test for visitor flow --- src/e2e/demo.signin.spec.ts | 18 ++++++++++++++++++ src/routes/root/components/auth-nav/index.tsx | 1 + 2 files changed, 19 insertions(+) create mode 100644 src/e2e/demo.signin.spec.ts diff --git a/src/e2e/demo.signin.spec.ts b/src/e2e/demo.signin.spec.ts new file mode 100644 index 0000000..8e2fdf7 --- /dev/null +++ b/src/e2e/demo.signin.spec.ts @@ -0,0 +1,18 @@ +import { test, expect } from "@playwright/test"; + +test.describe("Visitor", () => { + test("test", async ({ page }) => { + await page.goto("http://localhost:5173/"); + await page.getByTestId("login").click(); + await page.getByRole("textbox", { name: "Correo electrónico" }).click(); + await page + .getByRole("textbox", { name: "Correo electrónico" }) + .fill("diego@codeable.com"); + await page + .getByRole("textbox", { name: "Correo electrónico" }) + .press("Tab"); + await page.getByRole("textbox", { name: "Contraseña" }).fill("letmein"); + await page.getByRole("button", { name: "Iniciar sesión" }).click(); + await page.getByRole("link", { name: "FullStock inicio" }).click(); + }); +}); diff --git a/src/routes/root/components/auth-nav/index.tsx b/src/routes/root/components/auth-nav/index.tsx index 1cf10ec..1042fbb 100644 --- a/src/routes/root/components/auth-nav/index.tsx +++ b/src/routes/root/components/auth-nav/index.tsx @@ -26,6 +26,7 @@ export default function AuthNav({ user }: { user?: Omit }) { Iniciar sesión From 1633e7f6339b3360210ea85f6f023baa37ce3a97 Mon Sep 17 00:00:00 2001 From: Jota Date: Thu, 19 Jun 2025 20:17:47 -0500 Subject: [PATCH 2/3] refactor: update test description to Spanish and enhance visibility check for login success --- src/e2e/demo.signin.spec.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/e2e/demo.signin.spec.ts b/src/e2e/demo.signin.spec.ts index 8e2fdf7..e828c38 100644 --- a/src/e2e/demo.signin.spec.ts +++ b/src/e2e/demo.signin.spec.ts @@ -1,6 +1,6 @@ import { test, expect } from "@playwright/test"; -test.describe("Visitor", () => { +test.describe("Visitante inicio sesion", () => { test("test", async ({ page }) => { await page.goto("http://localhost:5173/"); await page.getByTestId("login").click(); @@ -13,6 +13,7 @@ test.describe("Visitor", () => { .press("Tab"); await page.getByRole("textbox", { name: "Contraseña" }).fill("letmein"); await page.getByRole("button", { name: "Iniciar sesión" }).click(); - await page.getByRole("link", { name: "FullStock inicio" }).click(); + + await expect(page.getByText("Bienvenido diego@codeable.com")).toBeVisible(); }); }); From 745e3ec4ba3ddc3c57d22ab384b0a1f98d0dceab Mon Sep 17 00:00:00 2001 From: Diego Torres Date: Thu, 19 Jun 2025 20:56:10 -0500 Subject: [PATCH 3/3] fix: add ON DELETE CASCADE to user_id reference in carts table and update secure cookie setting based on environment --- src/db/migrations/initial.sql | 2 +- src/e2e/demo.signin.spec.ts | 32 ++++++++++++++++++++++++++++++++ src/session.server.ts | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/db/migrations/initial.sql b/src/db/migrations/initial.sql index 11ad170..2d2bc31 100644 --- a/src/db/migrations/initial.sql +++ b/src/db/migrations/initial.sql @@ -36,7 +36,7 @@ CREATE TABLE IF NOT EXISTS products ( CREATE TABLE IF NOT EXISTS carts ( id SERIAL PRIMARY KEY, session_cart_id UUID UNIQUE DEFAULT gen_random_uuid(), - user_id INTEGER REFERENCES users(id), + user_id INTEGER REFERENCES users(id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); diff --git a/src/e2e/demo.signin.spec.ts b/src/e2e/demo.signin.spec.ts index e828c38..fd643d7 100644 --- a/src/e2e/demo.signin.spec.ts +++ b/src/e2e/demo.signin.spec.ts @@ -1,6 +1,38 @@ import { test, expect } from "@playwright/test"; +import { hashPassword } from "@/lib/security"; +import type { CreateUserDTO } from "@/models/user.model"; +import { + createUser, + deleteUser, + getUserByEmail, +} from "@/repositories/user.repository"; + test.describe("Visitante inicio sesion", () => { + let testUserId: number; + + test.beforeAll(async () => { + const testUser: CreateUserDTO = { + email: "diego@codeable.com", + name: null, + password: await hashPassword("letmein"), + isGuest: false, + }; + + const existingUser = await getUserByEmail(testUser.email); + + if (existingUser) { + await deleteUser(existingUser.id); + } + + const user = await createUser(testUser); + testUserId = user.id; + }); + + test.afterAll(async () => { + await deleteUser(testUserId); + }); + test("test", async ({ page }) => { await page.goto("http://localhost:5173/"); await page.getByTestId("login").click(); diff --git a/src/session.server.ts b/src/session.server.ts index 89a5cb2..31d3a05 100644 --- a/src/session.server.ts +++ b/src/session.server.ts @@ -27,7 +27,7 @@ const { getSession, commitSession, destroySession } = path: "/", sameSite: "lax", secrets: ["s3cret1"], - secure: true, + secure: process.env.NODE_ENV === "production", // true en producción, false en desarrollo }, });