136 lines
4.3 KiB
JavaScript
136 lines
4.3 KiB
JavaScript
const argon2 = require('argon2');
|
|
const { PrismaClient } = require('@prisma/client');
|
|
|
|
async function createTestUser() {
|
|
const prisma = new PrismaClient({
|
|
datasourceUrl: 'postgres://app:app@localhost:5432/skymoney'
|
|
});
|
|
|
|
try {
|
|
// Delete existing test user if exists
|
|
await prisma.user.deleteMany({
|
|
where: { email: 'test@skymoney.com' }
|
|
});
|
|
console.log('✓ Cleaned up old test user');
|
|
|
|
// Create user
|
|
const hash = await argon2.hash('password123');
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
email: 'test@skymoney.com',
|
|
passwordHash: hash,
|
|
displayName: 'Test User',
|
|
timezone: 'America/New_York'
|
|
}
|
|
});
|
|
console.log('✓ Created user:', user.id);
|
|
|
|
// Create categories (must total 100%)
|
|
await prisma.variableCategory.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Groceries',
|
|
percent: 50,
|
|
balanceCents: 150000n // $1500
|
|
}
|
|
});
|
|
await prisma.variableCategory.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Other',
|
|
percent: 50,
|
|
balanceCents: 150000n // $1500
|
|
}
|
|
});
|
|
console.log('✓ Created categories (100% total)');
|
|
|
|
const today = new Date();
|
|
today.setHours(0, 0, 0, 0);
|
|
|
|
// Create 3 overdue bills with different overdue dates (oldest first priority)
|
|
|
|
// 1. RENT - Overdue 5 days ago (OLDEST = HIGHEST PRIORITY)
|
|
const rentOverdue = new Date(today);
|
|
rentOverdue.setDate(rentOverdue.getDate() - 5);
|
|
await prisma.fixedPlan.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Rent',
|
|
totalCents: 150000n, // $1500 total
|
|
fundedCents: 100000n, // $1000 funded
|
|
currentFundedCents: 100000n,
|
|
dueOn: rentOverdue,
|
|
cycleStart: rentOverdue,
|
|
frequency: 'monthly',
|
|
needsFundingThisPeriod: true,
|
|
isOverdue: true,
|
|
overdueAmount: 50000n, // $500 overdue
|
|
overdueSince: rentOverdue
|
|
}
|
|
});
|
|
console.log('✓ Rent: $1500 total, $500 overdue (5 days ago - OLDEST)');
|
|
|
|
// 2. UTILITIES - Overdue 3 days ago (SECOND PRIORITY)
|
|
const utilOverdue = new Date(today);
|
|
utilOverdue.setDate(utilOverdue.getDate() - 3);
|
|
await prisma.fixedPlan.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Utilities',
|
|
totalCents: 20000n, // $200 total
|
|
fundedCents: 10000n, // $100 funded
|
|
currentFundedCents: 10000n,
|
|
dueOn: utilOverdue,
|
|
cycleStart: utilOverdue,
|
|
frequency: 'monthly',
|
|
needsFundingThisPeriod: true,
|
|
isOverdue: true,
|
|
overdueAmount: 10000n, // $100 overdue
|
|
overdueSince: utilOverdue
|
|
}
|
|
});
|
|
console.log('✓ Utilities: $200 total, $100 overdue (3 days ago)');
|
|
|
|
// 3. PHONE - Overdue 1 day ago (NEWEST = LOWEST PRIORITY)
|
|
const phoneOverdue = new Date(today);
|
|
phoneOverdue.setDate(phoneOverdue.getDate() - 1);
|
|
await prisma.fixedPlan.create({
|
|
data: {
|
|
userId: user.id,
|
|
name: 'Phone',
|
|
totalCents: 10000n, // $100 total
|
|
fundedCents: 5000n, // $50 funded
|
|
currentFundedCents: 5000n,
|
|
dueOn: phoneOverdue,
|
|
cycleStart: phoneOverdue,
|
|
frequency: 'monthly',
|
|
needsFundingThisPeriod: true,
|
|
isOverdue: true,
|
|
overdueAmount: 5000n, // $50 overdue
|
|
overdueSince: phoneOverdue
|
|
}
|
|
});
|
|
console.log('✓ Phone: $100 total, $50 overdue (1 day ago - NEWEST)');
|
|
|
|
console.log('\n✅ Multi-overdue test user ready!');
|
|
console.log(' Email: test@skymoney.com');
|
|
console.log(' Password: password123');
|
|
console.log('\n OVERDUE BILLS (priority order):');
|
|
console.log(' 1. Rent: $500 (5 days overdue)');
|
|
console.log(' 2. Utilities: $100 (3 days overdue)');
|
|
console.log(' 3. Phone: $50 (1 day overdue)');
|
|
console.log(' TOTAL OVERDUE: $650');
|
|
console.log('\n Test scenarios:');
|
|
console.log(' - Post $500 income → Should pay Rent only');
|
|
console.log(' - Post $600 income → Should pay Rent ($500) + Utilities ($100)');
|
|
console.log(' - Post $700 income → Should pay all 3 overdue bills');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Error:', error.message);
|
|
} finally {
|
|
await prisma.$disconnect();
|
|
}
|
|
}
|
|
|
|
createTestUser();
|