- Add Stripe and Mercado Pago providers for handling subscriptions. - Create billing repository and access services for managing billing records. - Implement webhook handlers for processing events from Stripe and Mercado Pago. - Add routes for checkout, canceling subscriptions, and retrieving billing status. - Introduce billing status management with appropriate state transitions. - Create tests for billing functionalities including webhook idempotency and provider resolution. - Document the billing module architecture, environment variables, and API endpoints.
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import { mock } from 'bun:test';
|
|
import { createPrismaMock } from 'bun-mock-prisma';
|
|
|
|
import type { PrismaClient } from '@/generated/prisma/client';
|
|
import type { PrismaClientMock } from 'bun-mock-prisma';
|
|
|
|
export const prismaMock = createPrismaMock<PrismaClient>() as PrismaClientMock<PrismaClient>;
|
|
export const sendMailMock = mock(
|
|
async (_input: {
|
|
to: string;
|
|
subject: string;
|
|
html: string;
|
|
text: string;
|
|
}) => undefined
|
|
);
|
|
export const transactionMock = mock(
|
|
async <T>(fn: (tx: PrismaClientMock<PrismaClient>) => Promise<T>) => fn(prismaMock)
|
|
);
|
|
export const dbMock = {
|
|
complexUser: prismaMock.complexUser,
|
|
complex: prismaMock.complex,
|
|
user: prismaMock.user,
|
|
complexInvitation: prismaMock.complexInvitation,
|
|
sport: prismaMock.sport,
|
|
court: prismaMock.court,
|
|
courtBooking: prismaMock.courtBooking,
|
|
courtBookingLog: prismaMock.courtBookingLog,
|
|
courtAvailability: prismaMock.courtAvailability,
|
|
courtPriceRule: prismaMock.courtPriceRule,
|
|
complexBilling: prismaMock.complexBilling,
|
|
billingEvent: prismaMock.billingEvent,
|
|
$transaction: transactionMock,
|
|
};
|
|
|
|
mock.module('@/lib/prisma', () => ({
|
|
__esModule: true,
|
|
db: dbMock,
|
|
}));
|
|
|
|
mock.module('@/lib/mailer', () => ({
|
|
__esModule: true,
|
|
sendMail: sendMailMock,
|
|
}));
|
|
|
|
export const uuidV7Mock = mock(() => '00000000-0000-4000-8000-000000000001');
|
|
|
|
mock.module('uuid', () => ({
|
|
__esModule: true,
|
|
v7: uuidV7Mock,
|
|
}));
|