mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
38 lines
1.6 KiB
TypeScript
38 lines
1.6 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
|
import { PrismaClient } from "@prisma/client";
|
|
import { bookOneAdult } from "../../fixtures/booking-flow";
|
|
import { PROMO_VALID } from "../../fixtures/data";
|
|
|
|
const prisma = new PrismaClient();
|
|
test.afterAll(async () => {
|
|
await prisma.$disconnect();
|
|
});
|
|
|
|
/**
|
|
* UA-8 ✅ — a VALID promo is applied server-side even though the browser drops it (H-13). The portal
|
|
* still sums UNDISCOUNTED per-passenger fares into reviewedTotalMinor, but the server recomputes the
|
|
* authoritative fare (promo included, via the promoCode it forwards) and books the DISCOUNTED total —
|
|
* so the customer is charged the promo price, not full price.
|
|
*/
|
|
test("UA-8: valid promo is applied server-side to the booked total (H-13)", async ({ page }) => {
|
|
const r = await bookOneAdult(page, {
|
|
nationality: "Ethiopian",
|
|
paymentMethod: "WALLET",
|
|
promoCode: PROMO_VALID,
|
|
});
|
|
|
|
const fb = r.fareBreakdown;
|
|
expect(fb).toBeTruthy();
|
|
|
|
// The breakdown recognized the promo and computed a discount…
|
|
expect(fb.discountMinor).toBeGreaterThan(0);
|
|
expect(fb.totalMinor).toBeLessThan(fb.subtotalMinor);
|
|
|
|
// The browser still sends the UNDISCOUNTED subtotal (the frontend drops the promo)…
|
|
expect(r.reviewedTotalMinor).toBe(fb.subtotalMinor);
|
|
// …but the SERVER now applies the promo: the booking is stored at the discounted total.
|
|
const booking = await prisma.booking.findUniqueOrThrow({ where: { id: r.bookingId } });
|
|
expect(booking.totalMinor).toBeLessThan(fb.subtotalMinor); // ✅ discount honored
|
|
expect(booking.totalMinor).toBe(fb.subtotalMinor - fb.discountMinor);
|
|
});
|