agmission/Development/server/tests/test_trigger_promo_webhook.js

88 lines
3.1 KiB
JavaScript

#!/usr/bin/env node
'use strict';
/**
* Manually trigger subscription_schedule.completed webhook event
* This simulates what happens when a promo schedule completes
*
* Usage:
* node tests/test_trigger_promo_webhook.js sub_sched_xxx
*/
const path = require('path');
// Load environment
const envPath = path.resolve(process.cwd(), './environment.env');
require('dotenv').config({ path: envPath });
const axios = require('axios');
const scheduleId = process.argv[2];
if (!scheduleId || !scheduleId.startsWith('sub_sched_')) {
console.error('Usage: node tests/test_trigger_promo_webhook.js sub_sched_xxx');
process.exit(1);
}
async function triggerWebhook() {
console.log('\n🔔 Triggering webhook event for schedule:', scheduleId);
console.log('════════════════════════════════════════════════════════\n');
try {
// Use Stripe CLI to trigger the event
const { spawn } = require('child_process');
console.log('Using Stripe CLI to trigger event...\n');
const stripe = spawn('stripe', [
'trigger',
'subscription_schedule.completed',
'--add', `subscription_schedule:id=${scheduleId}`
]);
stripe.stdout.on('data', (data) => {
console.log(data.toString());
});
stripe.stderr.on('data', (data) => {
console.error(data.toString());
});
stripe.on('close', (code) => {
if (code === 0) {
console.log('\n✅ Webhook event triggered successfully!');
console.log('\n📋 Check your server logs for:');
console.log(' - "Subscription schedule completed: ..."');
console.log(' - "Promo expired email sent to ..."');
console.log('\n📧 Check email inbox or test-logs/promo-expired-preview.html\n');
} else {
console.error(`\n❌ Stripe CLI exited with code ${code}`);
console.error('\nMake sure:');
console.error(' 1. Stripe CLI is installed: https://stripe.com/docs/stripe-cli');
console.error(' 2. You are logged in: stripe login');
console.error(' 3. Your webhook endpoint is listening\n');
}
process.exit(code);
});
} catch (error) {
console.error('\n❌ Error triggering webhook:', error.message);
console.error('\nTrying alternative method: forwarding to local webhook endpoint...\n');
// Alternative: Send POST request to local webhook endpoint
const webhookUrl = `http://localhost:${process.env.AGM_PORT || 4100}/api/subscription/webhooks`;
console.log(`Sending to: ${webhookUrl}`);
// This won't work without proper Stripe signature, but shows the concept
console.log('\n⚠ This requires Stripe webhook signature verification.');
console.log('Use Stripe CLI instead:');
console.log(`\n stripe trigger subscription_schedule.completed --add subscription_schedule:id=${scheduleId}`);
console.log('\nOr forward webhooks:');
console.log(` stripe listen --forward-to localhost:${process.env.AGM_PORT || 4100}/api/subscription/webhooks\n`);
process.exit(1);
}
}
triggerWebhook();