mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-15 15:24:29 +00:00
166 lines
5.5 KiB
JavaScript
166 lines
5.5 KiB
JavaScript
const API_KEY = process.argv[2];
|
|
const BASE_URL = 'http://localhost:3000';
|
|
|
|
if (!API_KEY) {
|
|
console.error('Please provide API KEY as argument');
|
|
process.exit(1);
|
|
}
|
|
|
|
require('dotenv').config({ path: '.env.local' });
|
|
const { createClient } = require('@supabase/supabase-js');
|
|
const supabase = createClient(process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.SUPABASE_SERVICE_ROLE_KEY);
|
|
|
|
async function runTests() {
|
|
console.log('Starting Complete Kiosk API Tests...\n');
|
|
|
|
let createdBooking = null;
|
|
|
|
try {
|
|
// Test 1: Authenticate
|
|
console.log('--- Test 1: Authenticate ---');
|
|
const authRes = await fetch(`${BASE_URL}/api/kiosk/authenticate`, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ api_key: API_KEY })
|
|
});
|
|
|
|
console.log('Status:', authRes.status);
|
|
const authData = await authRes.json();
|
|
console.log('Response:', JSON.stringify(authData, null, 2));
|
|
|
|
if (authRes.status !== 200) throw new Error('Authentication failed');
|
|
console.log('✅ Auth Test Passed\n');
|
|
|
|
// Test 2: Get Bookings for today
|
|
console.log('--- Test 2: Get Bookings for Today ---');
|
|
const today = new Date().toISOString().split('T')[0];
|
|
const getBookingsRes = await fetch(
|
|
`${BASE_URL}/api/kiosk/bookings?date=${today}`,
|
|
{ headers: { 'x-kiosk-api-key': API_KEY } }
|
|
);
|
|
|
|
console.log('Status:', getBookingsRes.status);
|
|
const getBookingsData = await getBookingsRes.json();
|
|
console.log(`Found ${getBookingsData.bookings?.length || 0} bookings today`);
|
|
|
|
if (getBookingsRes.status !== 200) throw new Error('Get bookings failed');
|
|
console.log('✅ Get Bookings Test Passed\n');
|
|
|
|
// Test 3: Get Available Resources
|
|
console.log('--- Test 3: Get Available Resources ---');
|
|
const now = new Date();
|
|
const oneHourFromNow = new Date(now.getTime() + 60 * 60 * 1000);
|
|
|
|
const resourcesRes = await fetch(
|
|
`${BASE_URL}/api/kiosk/resources/available?start_time=${now.toISOString()}&end_time=${oneHourFromNow.toISOString()}`,
|
|
{ headers: { 'x-kiosk-api-key': API_KEY } }
|
|
);
|
|
|
|
console.log('Status:', resourcesRes.status);
|
|
const resourcesData = await resourcesRes.json();
|
|
console.log(`Available resources: ${resourcesData.total_available}`);
|
|
|
|
if (resourcesRes.status !== 200) throw new Error('Get resources failed');
|
|
console.log('✅ Get Resources Test Passed\n');
|
|
|
|
// Test 4: Create Booking (Scheduled)
|
|
console.log('--- Test 4: Create Scheduled Booking ---');
|
|
|
|
const { data: services } = await supabase
|
|
.from('services')
|
|
.select('id, name, duration_minutes')
|
|
.eq('is_active', true)
|
|
.limit(1);
|
|
|
|
const { data: staff } = await supabase
|
|
.from('staff')
|
|
.select('id, display_name')
|
|
.eq('is_active', true)
|
|
.limit(1);
|
|
|
|
if (!services || services.length === 0 || !staff || staff.length === 0) {
|
|
console.error('No services or staff available');
|
|
return;
|
|
}
|
|
|
|
const scheduledStartTime = new Date();
|
|
scheduledStartTime.setHours(scheduledStartTime.getHours() + 2);
|
|
|
|
const createBookingRes = await fetch(`${BASE_URL}/api/kiosk/bookings`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'x-kiosk-api-key': API_KEY
|
|
},
|
|
body: JSON.stringify({
|
|
customer_email: `scheduled_${Date.now()}@example.com`,
|
|
customer_name: 'Scheduled Customer',
|
|
customer_phone: '+525512345678',
|
|
service_id: services[0].id,
|
|
staff_id: staff[0].id,
|
|
start_time_utc: scheduledStartTime.toISOString(),
|
|
notes: 'Scheduled booking test'
|
|
})
|
|
});
|
|
|
|
console.log('Status:', createBookingRes.status);
|
|
const createBookingData = await createBookingRes.json();
|
|
console.log('Response:', JSON.stringify(createBookingData, null, 2));
|
|
|
|
if (createBookingRes.status !== 201) throw new Error('Create booking failed');
|
|
createdBooking = createBookingData.booking;
|
|
console.log('✅ Create Booking Test Passed\n');
|
|
|
|
// Test 5: Confirm Booking
|
|
console.log('--- Test 5: Confirm Booking ---');
|
|
if (createdBooking && createdBooking.short_id) {
|
|
const confirmRes = await fetch(
|
|
`${BASE_URL}/api/kiosk/bookings/${createdBooking.short_id}/confirm`,
|
|
{
|
|
method: 'POST',
|
|
headers: { 'x-kiosk-api-key': API_KEY }
|
|
}
|
|
);
|
|
|
|
console.log('Status:', confirmRes.status);
|
|
const confirmData = await confirmRes.json();
|
|
console.log('Response:', JSON.stringify(confirmData, null, 2));
|
|
|
|
if (confirmRes.status !== 200) throw new Error('Confirm booking failed');
|
|
console.log('✅ Confirm Booking Test Passed\n');
|
|
}
|
|
|
|
// Test 6: Walk-in Booking
|
|
console.log('--- Test 6: Walk-in Booking ---');
|
|
const walkinRes = await fetch(`${BASE_URL}/api/kiosk/walkin`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'x-kiosk-api-key': API_KEY
|
|
},
|
|
body: JSON.stringify({
|
|
customer_email: `walkin_${Date.now()}@example.com`,
|
|
customer_name: 'Walk-in Customer',
|
|
service_id: services[0].id,
|
|
notes: 'Automated Walk-in Test'
|
|
})
|
|
});
|
|
|
|
console.log('Status:', walkinRes.status);
|
|
const walkinData = await walkinRes.json();
|
|
console.log('Response:', JSON.stringify(walkinData, null, 2));
|
|
|
|
if (walkinRes.status !== 201) throw new Error('Walk-in failed');
|
|
console.log('✅ Walk-in Test Passed\n');
|
|
|
|
console.log('✅✅✅ ALL TESTS PASSED ✅✅✅');
|
|
process.exit(0);
|
|
|
|
} catch (e) {
|
|
console.error('\n❌ Test Failed:', e.message);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
runTests();
|