CentralBackend/scripts/testRenewalCron.js
2026-03-16 16:04:36 +01:00

46 lines
1.6 KiB
JavaScript

/**
* Test script for the auto-renewal cron job.
*
* Usage:
* node scripts/testRenewalCron.js
*
* This will immediately run the full cron logic:
* - Renew if last invoice is 'paid' (or no invoice exists) → generate new invoice + advance next_billing_at
* - Skip if last invoice is NOT paid → just advance next_billing_at, no new invoice
* - Skip if gift-abo without registered user (user_id NULL) → don't advance
*
* Test setup (run in MySQL/phpMyAdmin):
*
* -- 1. Make a subscription due for billing:
* UPDATE coffee_abonements SET next_billing_at = NOW() - INTERVAL 1 DAY WHERE id = <ID>;
*
* -- 2. To test "paid" flow: mark last invoice as paid:
* UPDATE invoices SET status = 'paid' WHERE source_type = 'subscription' AND source_id = <ABO_ID> ORDER BY id DESC LIMIT 1;
*
* -- 3. To test "unpaid" flow: leave invoice status as 'issued'
*
* -- 4. To test gift skip: set user_id to NULL:
* UPDATE coffee_abonements SET user_id = NULL WHERE id = <ID>;
*/
require('dotenv').config();
const RenewalCronService = require('../services/abonemments/RenewalCronService');
(async () => {
console.log('=== Renewal Cron Test ===');
console.log('Time:', new Date().toISOString());
console.log('Day of month:', new Date().getDate(), '(reactivation before 11th?', new Date().getDate() <= 10, ')');
console.log('');
const cron = new RenewalCronService();
try {
await cron.processDueRenewals();
console.log('');
console.log('=== Test complete ===');
} catch (err) {
console.error('Test failed:', err);
}
setTimeout(() => process.exit(0), 3000);
})();