mirror of
https://github.com/marcogll/AnchorOS.git
synced 2026-03-16 01:24:39 +00:00
feat: Add kiosk setup and API testing scripts, alongside database function fixes for API key generation and short IDs.
This commit is contained in:
165
scripts/test-kiosk-complete.js
Normal file
165
scripts/test-kiosk-complete.js
Normal file
@@ -0,0 +1,165 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user