195 lines
6.6 KiB
JavaScript
195 lines
6.6 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createCompanyWithEmployee = createCompanyWithEmployee;
|
|
exports.createVehicle = createVehicle;
|
|
exports.createCustomer = createCustomer;
|
|
exports.createRenter = createRenter;
|
|
exports.createAdminUser = createAdminUser;
|
|
exports.createReservation = createReservation;
|
|
exports.createRentalPayment = createRentalPayment;
|
|
exports.createSubscriptionInvoice = createSubscriptionInvoice;
|
|
exports.createCompanyNotification = createCompanyNotification;
|
|
exports.createRenterNotification = createRenterNotification;
|
|
exports.signEmployeeToken = signEmployeeToken;
|
|
exports.signAdminToken = signAdminToken;
|
|
exports.signRenterToken = signRenterToken;
|
|
exports.authHeader = authHeader;
|
|
const bcryptjs_1 = __importDefault(require("bcryptjs"));
|
|
const prisma_1 = require("../../lib/prisma");
|
|
const tokens_1 = require("../../security/tokens");
|
|
let counter = 0;
|
|
function uid() {
|
|
return `${Date.now()}-${++counter}-${Math.random().toString(36).slice(2, 7)}`;
|
|
}
|
|
async function createCompanyWithEmployee(overrides = {}) {
|
|
const slug = `test-${uid()}`;
|
|
const company = await prisma_1.prisma.company.create({
|
|
data: {
|
|
name: `Test Company ${slug}`,
|
|
slug,
|
|
email: `company-${slug}@test.com`,
|
|
status: (overrides.companyStatus ?? 'ACTIVE'),
|
|
subscription: {
|
|
create: { status: 'TRIALING', plan: 'STARTER' },
|
|
},
|
|
},
|
|
});
|
|
const employee = await prisma_1.prisma.employee.create({
|
|
data: {
|
|
companyId: company.id,
|
|
clerkUserId: `clerk_${uid()}`,
|
|
firstName: 'Test',
|
|
lastName: 'User',
|
|
email: `employee-${uid()}@test.com`,
|
|
role: overrides.role ?? 'OWNER',
|
|
},
|
|
});
|
|
return { company, employee };
|
|
}
|
|
async function createVehicle(companyId, overrides = {}) {
|
|
return prisma_1.prisma.vehicle.create({
|
|
data: {
|
|
companyId,
|
|
make: 'Toyota',
|
|
model: 'Corolla',
|
|
year: 2022,
|
|
color: 'White',
|
|
licensePlate: `PL-${uid()}`,
|
|
dailyRate: 500,
|
|
status: 'AVAILABLE',
|
|
isPublished: true,
|
|
pickupLocations: ['Casablanca'],
|
|
allowDifferentDropoff: false,
|
|
dropoffLocations: [],
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
async function createCustomer(companyId, overrides = {}) {
|
|
return prisma_1.prisma.customer.create({
|
|
data: {
|
|
companyId,
|
|
firstName: 'Jane',
|
|
lastName: 'Doe',
|
|
email: `customer-${uid()}@test.com`,
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
async function createRenter(overrides = {}) {
|
|
return prisma_1.prisma.renter.create({
|
|
data: {
|
|
firstName: overrides.firstName ?? 'Renter',
|
|
lastName: overrides.lastName ?? 'User',
|
|
email: overrides.email ?? `renter-${uid()}@test.com`,
|
|
passwordHash: await bcryptjs_1.default.hash(overrides.password ?? 'RenterPass123!', 10),
|
|
isActive: overrides.isActive ?? true,
|
|
},
|
|
});
|
|
}
|
|
async function createAdminUser(overrides = {}) {
|
|
return prisma_1.prisma.adminUser.create({
|
|
data: {
|
|
email: overrides.email ?? `admin-${uid()}@test.com`,
|
|
firstName: overrides.firstName ?? 'Admin',
|
|
lastName: overrides.lastName ?? 'User',
|
|
passwordHash: await bcryptjs_1.default.hash(overrides.password ?? 'AdminPass123!', 10),
|
|
role: (overrides.role ?? 'ADMIN'),
|
|
isActive: overrides.isActive ?? true,
|
|
totpEnabled: overrides.totpEnabled ?? false,
|
|
totpSecret: overrides.totpSecret ?? null,
|
|
},
|
|
});
|
|
}
|
|
async function createReservation(companyId, vehicleId, customerId, overrides = {}) {
|
|
return prisma_1.prisma.reservation.create({
|
|
data: {
|
|
companyId,
|
|
vehicleId,
|
|
customerId,
|
|
startDate: new Date(Date.now() + 24 * 60 * 60 * 1000),
|
|
endDate: new Date(Date.now() + 4 * 24 * 60 * 60 * 1000),
|
|
dailyRate: 500,
|
|
totalDays: 3,
|
|
totalAmount: 1500,
|
|
depositAmount: 300,
|
|
status: 'CONFIRMED',
|
|
paymentStatus: 'UNPAID',
|
|
paidAmount: 0,
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
async function createRentalPayment(companyId, reservationId, overrides = {}) {
|
|
return prisma_1.prisma.rentalPayment.create({
|
|
data: {
|
|
companyId,
|
|
reservationId,
|
|
amount: 500,
|
|
currency: 'MAD',
|
|
status: 'SUCCEEDED',
|
|
type: 'CHARGE',
|
|
paymentProvider: 'AMANPAY',
|
|
amanpayTransactionId: `aman-${uid()}`,
|
|
paidAt: new Date(),
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
async function createSubscriptionInvoice(companyId, subscriptionId, overrides = {}) {
|
|
return prisma_1.prisma.subscriptionInvoice.create({
|
|
data: {
|
|
companyId,
|
|
subscriptionId,
|
|
amount: 2990,
|
|
currency: 'MAD',
|
|
status: 'PENDING',
|
|
paymentProvider: 'AMANPAY',
|
|
amanpayTransactionId: `sub-${uid()}`,
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
async function createCompanyNotification(companyId, employeeId, overrides = {}) {
|
|
return prisma_1.prisma.notification.create({
|
|
data: {
|
|
companyId,
|
|
employeeId,
|
|
type: 'PAYMENT_RECEIVED',
|
|
title: 'Payment received',
|
|
body: 'A payment was recorded.',
|
|
channel: 'IN_APP',
|
|
status: 'PENDING',
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
async function createRenterNotification(renterId, overrides = {}) {
|
|
return prisma_1.prisma.notification.create({
|
|
data: {
|
|
renterId,
|
|
type: 'BOOKING_CONFIRMED',
|
|
title: 'Booking confirmed',
|
|
body: 'Your booking is confirmed.',
|
|
channel: 'IN_APP',
|
|
status: 'PENDING',
|
|
...overrides,
|
|
},
|
|
});
|
|
}
|
|
function signEmployeeToken(employeeId, _companyId, _role = 'OWNER') {
|
|
return (0, tokens_1.signActorToken)(employeeId, 'employee', { expiresIn: '1h' });
|
|
}
|
|
function signAdminToken(adminId) {
|
|
return (0, tokens_1.signActorToken)(adminId, 'admin', { expiresIn: '1h', last2faAt: Date.now() });
|
|
}
|
|
function signRenterToken(renterId) {
|
|
return (0, tokens_1.signActorToken)(renterId, 'renter', { expiresIn: '1h' });
|
|
}
|
|
function authHeader(token) {
|
|
return { Authorization: `Bearer ${token}` };
|
|
}
|
|
//# sourceMappingURL=fixtures.js.map
|