Skip to content

Commit c99683e

Browse files
committed
feat: update payment processing tests and utilities, add credit card mock data
1 parent 9a1b22f commit c99683e

File tree

7 files changed

+111
-10
lines changed

7 files changed

+111
-10
lines changed

.env.test

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,10 @@ ADMIN_DB_NAME=postgres
55

66
# Culqui Keys
77
CULQI_PRIVATE_KEY="sk_test_xxx"
8-
VITE_CULQI_PUBLIC_KEY="pk_test_xxx"
8+
VITE_CULQI_PUBLIC_KEY="pk_test_xxx"
9+
10+
# Cloud Storage base url
11+
CS_BASE_URL="https://fullstock-images.s3.us-east-2.amazonaws.com"
12+
13+
CULQI_PRIVATE_KEY="sk_test_EC8oOLd3ZiCTKqjN"
14+
VITE_CULQI_PUBLIC_KEY="pk_test_Ws4NXfH95QXlZgaz"

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
"prisma:studio": "prisma studio",
2020
"prisma:seed": "prisma db seed",
2121
"test:prisma:migrate:deploy": "dotenv -e .env.test -- prisma migrate deploy",
22+
"test:prisma:migrate:reset": "dotenv -e .env.test -- prisma migrate reset",
2223
"test:e2e": "playwright test",
2324
"test:prisma:seed": "dotenv -e .env.test prisma db seed"
2425
},

src/e2e/guest-create-order.spec.ts

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
// import { createOrderFormData } from "@/lib/utils.tests";
22
import { expect, test } from "@playwright/test";
33

4-
import { baseUrl, cleanDatabase, createOrderFormData } from "./utils-tests-e2e";
4+
import {
5+
baseUrl,
6+
cleanDatabase,
7+
createOrderFormData,
8+
creditCards,
9+
} from "./utils-tests-e2e";
510

611
export type OrderFormData = Record<string, string>;
712

@@ -33,9 +38,43 @@ test.describe("Guest", () => {
3338

3439
await page.getByRole("button", { name: "Confirmar Orden" }).click();
3540

41+
const checkoutFrame = page.locator('iframe[name="checkout_frame"]');
42+
await expect(checkoutFrame).toBeVisible();
43+
44+
const validCard = creditCards.valid;
45+
46+
await checkoutFrame
47+
.contentFrame()
48+
.getByRole("textbox", { name: "#### #### #### ####" })
49+
.fill(validCard.number);
50+
3651
await expect(
37-
page.getByText("¡Muchas gracias por tu compra!")
52+
checkoutFrame.contentFrame().getByRole("img", { name: "Culqi icon" })
3853
).toBeVisible();
54+
55+
await checkoutFrame
56+
.contentFrame()
57+
.getByRole("textbox", { name: "MM/AA" })
58+
.fill(validCard.exp);
59+
60+
await checkoutFrame
61+
.contentFrame()
62+
.getByRole("textbox", { name: "CVV" })
63+
.fill(validCard.cvv);
64+
65+
await checkoutFrame
66+
.contentFrame()
67+
.getByRole("textbox", { name: "[email protected]" })
68+
.fill(orderForm["Correo electrónico"]);
69+
70+
await checkoutFrame
71+
.contentFrame()
72+
.getByRole("button", { name: "Pagar S/" })
73+
.click();
74+
75+
await expect(page.getByText("¡Muchas gracias por tu compra!")).toBeVisible({
76+
timeout: 10000,
77+
});
3978
await expect(page.getByTestId("orderId")).toBeVisible();
4079
});
4180
});

src/e2e/user-create-order.spec.ts

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { prisma } from "@/db/prisma";
44
import { hashPassword } from "@/lib/security";
55
import type { CreateUserDTO } from "@/models/user.model";
66

7-
import { baseUrl, cleanDatabase } from "./utils-tests-e2e";
7+
import { baseUrl, cleanDatabase, creditCards } from "./utils-tests-e2e";
88

99
test.beforeEach(async () => {
1010
await cleanDatabase();
@@ -19,9 +19,13 @@ test.describe("User", () => {
1919
isGuest: false,
2020
};
2121

22-
await prisma.user.create({
22+
console.log("Creating test user:", testUser);
23+
24+
const user = await prisma.user.create({
2325
data: testUser,
2426
});
27+
28+
console.log("Test user created:", user);
2529
});
2630

2731
test("User can create an order", async ({ page }) => {
@@ -76,9 +80,43 @@ test.describe("User", () => {
7680

7781
await page.getByRole("button", { name: "Confirmar Orden" }).click();
7882

83+
const checkoutFrame = page.locator('iframe[name="checkout_frame"]');
84+
await expect(checkoutFrame).toBeVisible();
85+
86+
const validCard = creditCards.valid;
87+
88+
await checkoutFrame
89+
.contentFrame()
90+
.getByRole("textbox", { name: "#### #### #### ####" })
91+
.fill(validCard.number);
92+
7993
await expect(
80-
page.getByText("¡Muchas gracias por tu compra!")
94+
checkoutFrame.contentFrame().getByRole("img", { name: "Culqi icon" })
8195
).toBeVisible();
96+
97+
await checkoutFrame
98+
.contentFrame()
99+
.getByRole("textbox", { name: "MM/AA" })
100+
.fill(validCard.exp);
101+
102+
await checkoutFrame
103+
.contentFrame()
104+
.getByRole("textbox", { name: "CVV" })
105+
.fill(validCard.cvv);
106+
107+
await checkoutFrame
108+
.contentFrame()
109+
.getByRole("textbox", { name: "[email protected]" })
110+
.fill(loginForm["Correo electrónico"]);
111+
112+
await checkoutFrame
113+
.contentFrame()
114+
.getByRole("button", { name: "Pagar S/" })
115+
.click();
116+
117+
await expect(page.getByText("¡Muchas gracias por tu compra!")).toBeVisible({
118+
timeout: 10000,
119+
});
82120
await expect(page.getByTestId("orderId")).toBeVisible();
83121
});
84122
});

src/e2e/utils-tests-e2e.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ export const createOrderFormData = (
1919
...overrides,
2020
});
2121

22+
export const creditCards = {
23+
valid: {
24+
number: "4111 1111 1111 1111",
25+
exp: "12/30",
26+
cvv: "123",
27+
},
28+
declined: {
29+
number: "4000 0200 0000 0000",
30+
exp: "12/30",
31+
cvv: "354",
32+
},
33+
};
34+
2235
export async function cleanDatabase() {
2336
await prisma.order.deleteMany();
2437
await prisma.cart.deleteMany();

src/lib/utils.tests.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ export const createTestOrder = (overrides: Partial<Order> = {}): Order => {
158158
createdAt: new Date(),
159159
updatedAt: new Date(),
160160
...details, // Expande todos los campos de contacto sin undefined
161+
paymentId: `payment-id-${Math.random()}`,
161162
...overrides,
162163
} satisfies Order;
163164
};
@@ -181,6 +182,7 @@ export const createTestDBOrder = (
181182
phone: "123456789",
182183
createdAt: new Date(),
183184
updatedAt: new Date(),
185+
paymentId: `payment-id-${Math.random()}`,
184186
...overrides,
185187
} satisfies PrismaOrder;
186188
};

src/services/order.service.test.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ describe("Order Service", () => {
6464

6565
vi.mocked(mockPrisma.order.create).mockResolvedValue(prismaOrder);
6666

67-
const order = await createOrder(mockedItems, mockedFormData);
67+
const order = await createOrder(mockedItems, mockedFormData, "payment-id");
6868
expect(mockPrisma.order.create).toHaveBeenCalledWith({
6969
data: {
7070
userId: mockedUser.id,
@@ -88,6 +88,7 @@ describe("Order Service", () => {
8888
imgSrc: item.imgSrc,
8989
})),
9090
},
91+
paymentId: "payment-id",
9192
},
9293
include: {
9394
items: true,
@@ -118,6 +119,7 @@ describe("Order Service", () => {
118119
zip: prismaOrder.zip,
119120
phone: prismaOrder.phone,
120121
},
122+
paymentId: prismaOrder.paymentId,
121123
});
122124
});
123125

@@ -187,9 +189,9 @@ describe("Order Service", () => {
187189
new Error("Database error")
188190
);
189191

190-
await expect(createOrder(mockedItems, mockedFormData)).rejects.toThrow(
191-
"Failed to create order"
192-
);
192+
await expect(
193+
createOrder(mockedItems, mockedFormData, "payment-id")
194+
).rejects.toThrow("Failed to create order");
193195

194196
expect(mockPrisma.order.create).toHaveBeenCalled();
195197
});

0 commit comments

Comments
 (0)