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();