Files
edr-platform/e2e-ui/specs/portal/ua1.spec.ts

32 lines
1.4 KiB
TypeScript

import { test, expect } from "@playwright/test";
import { PrismaClient } from "@prisma/client";
import { bookOneAdult } from "../../fixtures/booking-flow";
const prisma = new PrismaClient();
test.afterAll(async () => {
await prisma.$disconnect();
});
/**
* UA-1 — one-way, 1 adult, ETB, WALLET. The full real-browser booking flow, asserting the money
* chain: card fare > 0, and reviewedTotalMinor == Booking.totalMinor == displayTotalMinor ==
* PaymentIntent.amountMinor == wallet DEBIT, booking CONFIRMED.
*/
test("UA-1: one-way WALLET booking, price cross-check holds end to end", async ({ page }) => {
const r = await bookOneAdult(page, { nationality: "Ethiopian", paymentMethod: "WALLET" });
expect(r.confirmed).toBe(true);
expect([200, 201]).toContain(r.initiateStatus);
const booking = await prisma.booking.findUniqueOrThrow({ where: { id: r.bookingId } });
const intent = await prisma.paymentIntent.findUniqueOrThrow({ where: { bookingId: r.bookingId } });
const debit = await prisma.walletLedgerEntry.findFirst({
where: { relatedBookingId: r.bookingId, type: "DEBIT" },
});
expect(booking.totalMinor).toBe(r.reviewedTotalMinor);
expect(booking.displayTotalMinor).toBe(r.reviewedTotalMinor);
expect(intent.amountMinor).toBe(r.reviewedTotalMinor);
expect(debit?.amountMinor).toBe(r.reviewedTotalMinor);
expect(booking.status).toBe("CONFIRMED");
});