wulf-pulse/dev/test-time-entries-sync.ts

101 lines
3.1 KiB
TypeScript
Raw Normal View History

/**
* Test script for syncing time entries from Autotask
* Run with: npx tsx dev/test-time-entries-sync.ts
*/
import dotenv from 'dotenv';
import path from 'path';
import { AutotaskClient } from '@/lib/services/autotask-client';
import { EntitySyncService } from '@/lib/services/entity-sync';
import { EntityType } from '@/lib/types/sync';
// Load environment variables
dotenv.config({ path: path.resolve(__dirname, '../.env.local') });
async function testTimeEntriesSync() {
console.log('🔍 Testing Time Entries Sync\n');
// Validate environment variables
const requiredEnvVars = [
'AUTOTASK_API_URL',
'AUTOTASK_USERNAME',
'AUTOTASK_SECRET',
'AUTOTASK_API_INTEGRATION_CODE',
];
const missingVars = requiredEnvVars.filter(v => !process.env[v]);
if (missingVars.length > 0) {
console.error('❌ Missing required environment variables:', missingVars.join(', '));
process.exit(1);
}
try {
// Initialize Autotask client
console.log('Initializing Autotask client...');
const autotaskClient = new AutotaskClient({
apiUrl: process.env.AUTOTASK_API_URL!,
username: process.env.AUTOTASK_USERNAME!,
password: process.env.AUTOTASK_SECRET!,
apiIntegrationCode: process.env.AUTOTASK_API_INTEGRATION_CODE!,
});
console.log('✅ Autotask client initialized\n');
// Initialize entity sync service
console.log('Initializing entity sync service...');
const syncService = new EntitySyncService(autotaskClient);
console.log('✅ Entity sync service initialized\n');
// Test sync with a small date range (last 7 days)
console.log('Starting time entries sync (last 7 days)...');
console.log('This will sync time entries from the last 7 days only.\n');
const startTime = Date.now();
try {
const result = await syncService.syncEntity(
EntityType.TIME_ENTRIES,
false, // Full sync (not incremental)
0.019 // 7 days in years
);
const duration = Date.now() - startTime;
console.log('\n✅ Sync completed successfully!');
console.log(`Duration: ${(duration / 1000).toFixed(2)}s`);
console.log('\nResults:');
console.log(` Records added: ${result.recordsAdded}`);
console.log(` Records updated: ${result.recordsUpdated}`);
console.log(` Records deleted: ${result.recordsDeleted}`);
console.log(` Total processed: ${result.recordsAdded + result.recordsUpdated}`);
} catch (syncError) {
console.error('\n❌ Sync failed with error:');
console.error(syncError);
// Try to provide more details
if (syncError instanceof Error) {
console.error('\nError details:');
console.error(' Message:', syncError.message);
console.error(' Stack:', syncError.stack);
}
throw syncError;
}
} catch (error) {
console.error('\n❌ Test failed:', error);
process.exit(1);
}
}
// Run the test
testTimeEntriesSync()
.then(() => {
console.log('\n✅ Test completed successfully');
process.exit(0);
})
.catch((error) => {
console.error('\n❌ Test failed:', error);
process.exit(1);
});