mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
38 lines
1.8 KiB
TypeScript
38 lines
1.8 KiB
TypeScript
import { test, expect } from "@playwright/test";
|
||
import { PrismaClient } from "@prisma/client";
|
||
import { bookTrip } from "../../fixtures/booking-flow";
|
||
|
||
const prisma = new PrismaClient();
|
||
test.afterAll(async () => {
|
||
await prisma.$disconnect();
|
||
});
|
||
|
||
/**
|
||
* UA-2 ✅ — full one-way USD booking (Other nationality, INTERNATIONAL class, WALLET). The money chain
|
||
* is now COHERENT: the passenger sees and agrees to a USD amount (displayCurrency/displayTotalMinor),
|
||
* while the stored charge basis is honestly labeled ETB (currency/totalMinor). The two are the same
|
||
* fare at the USD→ETB rate — no longer a mislabeled 100× divergence.
|
||
*/
|
||
test("UA-2: USD booking — passenger amount in USD, charge basis stored coherently in ETB", async ({ page }) => {
|
||
const r = await bookTrip(page, { nationality: "Other", paymentMethod: "WALLET" });
|
||
expect(r.displayCurrency).toBe("USD");
|
||
expect(r.confirmed).toBe(true);
|
||
|
||
const booking = await prisma.booking.findUniqueOrThrow({ where: { id: r.bookingId } });
|
||
const intent = await prisma.paymentIntent.findUniqueOrThrow({ where: { bookingId: r.bookingId } });
|
||
|
||
// Passenger-facing: the USD amount they saw and agreed to (what the browser reviewed).
|
||
expect(booking.displayCurrency).toBe("USD");
|
||
expect(booking.displayTotalMinor).toBe(r.reviewedTotalMinor);
|
||
expect(r.reviewedTotalMinor).toBe(r.cardDisplayMinor);
|
||
|
||
// Stored charge basis: ETB, coherently labeled (no more USD mislabel).
|
||
expect(booking.currency).toBe("ETB");
|
||
expect(booking.totalMinor).toBe(r.cardBaseFareMinor); // the ETB fare
|
||
expect(booking.totalMinor).toBe(r.reviewedTotalMinor * 100); // ETB == USD display × rate
|
||
|
||
// The charge/intent moves the ETB amount; booking is confirmed.
|
||
expect(intent.amountMinor).toBe(booking.totalMinor);
|
||
expect(booking.status).toBe("CONFIRMED");
|
||
});
|