134 lines
4.1 KiB
JavaScript
134 lines
4.1 KiB
JavaScript
// Create test user with MULTIPLE overdue bills
|
|
const argon2 = require('argon2');
|
|
const { PrismaClient } = require('@prisma/client');
|
|
|
|
async function main() {
|
|
const prisma = new PrismaClient({
|
|
datasourceUrl: 'postgres://app:app@localhost:5432/skymoney'
|
|
});
|
|
|
|
try {
|
|
const email = 'test@skymoney.com';
|
|
const password = 'password123';
|
|
|
|
// Clean up existing user
|
|
await prisma.user.deleteMany({ where: { email } });
|
|
console.log('✓ Cleaned up old test user');
|
|
|
|
// Create user
|
|
const passwordHash = await argon2.hash(password);
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
email,
|
|
passwordHash,
|
|
displayName: 'Test User',
|
|
incomeFrequency: 'biweekly',
|
|
totalBudgetCents: BigInt(300000), // $3000
|
|
timezone: 'America/New_York',
|
|
},
|
|
});
|
|
console.log('✓ Created user:', user.id);
|
|
|
|
// Create income source
|
|
await prisma.incomeEvent.create({
|
|
data: {
|
|
id: '00000000-0000-0000-0000-000000000001',
|
|
userId: user.id,
|
|
postedAt: new Date(),
|
|
amountCents: BigInt(300000),
|
|
note: 'Initial budget',
|
|
},
|
|
});
|
|
console.log('✓ Created income: $3000');
|
|
|
|
// Create categories
|
|
await prisma.variableCategory.createMany({
|
|
data: [
|
|
{ userId: user.id, name: 'Groceries', percent: 50, priority: 1, balanceCents: BigInt(150000) },
|
|
{ userId: user.id, name: 'Other', percent: 50, priority: 2, balanceCents: BigInt(150000) },
|
|
],
|
|
});
|
|
console.log('✓ Created categories (100% total)');
|
|
|
|
const today = new Date();
|
|
today.setHours(6, 0, 0, 0); // 6am today
|
|
|
|
const threeDaysAgo = new Date(today);
|
|
threeDaysAgo.setDate(threeDaysAgo.getDate() - 3);
|
|
|
|
const oneWeekAgo = new Date(today);
|
|
oneWeekAgo.setDate(oneWeekAgo.getDate() - 7);
|
|
|
|
// Create THREE overdue bills with different dates
|
|
// 1. Rent - $1500, $1000 funded, $500 overdue (oldest - 7 days ago)
|
|
await prisma.fixedPlan.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Rent',
|
|
cycleStart: oneWeekAgo,
|
|
dueOn: today,
|
|
totalCents: BigInt(150000), // $1500
|
|
fundedCents: BigInt(100000), // $1000 funded
|
|
currentFundedCents: BigInt(100000),
|
|
priority: 1,
|
|
isOverdue: true,
|
|
overdueAmount: BigInt(50000), // $500 overdue
|
|
overdueSince: oneWeekAgo,
|
|
},
|
|
});
|
|
|
|
// 2. Utilities - $200, $100 funded, $100 overdue (3 days ago)
|
|
await prisma.fixedPlan.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Utilities',
|
|
cycleStart: threeDaysAgo,
|
|
dueOn: today,
|
|
totalCents: BigInt(20000), // $200
|
|
fundedCents: BigInt(10000), // $100 funded
|
|
currentFundedCents: BigInt(10000),
|
|
priority: 2,
|
|
isOverdue: true,
|
|
overdueAmount: BigInt(10000), // $100 overdue
|
|
overdueSince: threeDaysAgo,
|
|
},
|
|
});
|
|
|
|
// 3. Phone - $100, $50 funded, $50 overdue (today)
|
|
await prisma.fixedPlan.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Phone',
|
|
cycleStart: today,
|
|
dueOn: today,
|
|
totalCents: BigInt(10000), // $100
|
|
fundedCents: BigInt(5000), // $50 funded
|
|
currentFundedCents: BigInt(5000),
|
|
priority: 3,
|
|
isOverdue: true,
|
|
overdueAmount: BigInt(5000), // $50 overdue
|
|
overdueSince: today,
|
|
},
|
|
});
|
|
|
|
console.log('✓ Created 3 overdue plans:');
|
|
console.log(' - Rent: $1500 total, $1000 funded, $500 overdue (7 days ago)');
|
|
console.log(' - Utilities: $200 total, $100 funded, $100 overdue (3 days ago)');
|
|
console.log(' - Phone: $100 total, $50 funded, $50 overdue (today)');
|
|
console.log('\n✅ Test user ready!');
|
|
console.log(' Email: test@skymoney.com');
|
|
console.log(' Password: password123');
|
|
console.log(' Total overdue: $650');
|
|
console.log('\n💡 Post $1000 income to see priority order:');
|
|
console.log(' 1st: Rent $500 (oldest)');
|
|
console.log(' 2nd: Utilities $100');
|
|
console.log(' 3rd: Phone $50');
|
|
console.log(' Remaining $350 → normal allocation');
|
|
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
}
|
|
|
|
main();
|