#!/usr/bin/env bun
/**
* Test script for the embedding queue service
* Tests basic queue operations and statistics
*/
import { database, getDatabaseConfig } from '../src/backend/services/database.js';
import { embeddingQueueService } from '../src/backend/services/embeddingQueue.js';
// Disable semantic search for this test to avoid embedding issues
process.env.SEMANTIC_SEARCH_ENABLED = 'false';
import { createArticle } from '../src/backend/services/articles.js';
async function testEmbeddingQueue() {
console.log('π§ͺ Testing Embedding Queue Service...\n');
try {
// Connect to database
console.log('π‘ Connecting to database...');
await database.connect(getDatabaseConfig());
console.log('β
Database connected\n');
// Test 1: Get initial queue stats
console.log('π Getting initial queue statistics...');
const initialStats = await embeddingQueueService.getQueueStats();
console.log('Initial stats:', initialStats);
console.log('β
Queue stats retrieved\n');
// Test 2: Create a test article first (with unique name)
console.log('π Creating a test article...');
const timestamp = Date.now();
const testArticle = await createArticle(`Test Article for Queue ${timestamp}`, 'This is a test article for the embedding queue.', 'Test article creation');
console.log('β
Test article created:', testArticle.filename);
// Get the article ID from the database
const expectedSlug = `test-article-for-queue-${timestamp}`;
const articleResult = await database.query('SELECT id FROM articles WHERE slug = $1', [expectedSlug]);
const articleId = articleResult.rows[0]?.id;
if (!articleId) {
throw new Error('Failed to get article ID');
}
// Test 3: Enqueue a test task
console.log('π Enqueuing a test task...');
const taskId = await embeddingQueueService.enqueueTask({
articleId: articleId,
slug: expectedSlug,
operation: 'create',
priority: 'normal',
maxAttempts: 3,
scheduledAt: new Date(),
metadata: { test: true }
});
console.log('β
Task enqueued with ID:', taskId);
// Test 4: Get task status
console.log('π Getting task status...');
const taskStatus = await embeddingQueueService.getTaskStatus(taskId);
console.log('Task status:', {
id: taskStatus?.id,
status: taskStatus?.status,
operation: taskStatus?.operation,
priority: taskStatus?.priority
});
console.log('β
Task status retrieved\n');
// Test 5: Get updated queue stats
console.log('π Getting updated queue statistics...');
const updatedStats = await embeddingQueueService.getQueueStats();
console.log('Updated stats:', updatedStats);
console.log('β
Updated stats retrieved\n');
// Test 6: Get detailed queue stats
console.log('π Getting detailed queue statistics...');
const detailedStats = await embeddingQueueService.getDetailedQueueStats();
console.log('Detailed stats:', {
basicStats: detailedStats.stats,
tasksByPriority: detailedStats.tasksByPriority,
tasksByOperation: detailedStats.tasksByOperation,
recentActivity: detailedStats.recentActivity
});
console.log('β
Detailed stats retrieved\n');
// Test 7: Get queue health
console.log('π₯ Getting queue health...');
const health = await embeddingQueueService.getQueueHealth();
console.log('Queue health:', {
isHealthy: health.isHealthy,
totalTasks: health.totalTasks,
issues: health.issues
});
console.log('β
Queue health retrieved\n');
// Test 8: Dequeue the task
console.log('β¬οΈ Dequeuing task...');
const dequeuedTask = await embeddingQueueService.dequeueTask();
console.log('Dequeued task:', {
id: dequeuedTask?.id,
status: dequeuedTask?.status,
attempts: dequeuedTask?.attempts
});
console.log('β
Task dequeued\n');
// Test 9: Update task status to completed
if (dequeuedTask) {
console.log('β
Updating task status to completed...');
await embeddingQueueService.updateTaskStatus(dequeuedTask.id, 'completed');
console.log('β
Task status updated\n');
}
// Test 10: Final queue stats
console.log('π Getting final queue statistics...');
const finalStats = await embeddingQueueService.getQueueStats();
console.log('Final stats:', finalStats);
console.log('β
Final stats retrieved\n');
// Test 11: Clean up completed tasks
console.log('π§Ή Cleaning up completed tasks...');
const cleanedCount = await embeddingQueueService.clearCompletedTasks();
console.log(`β
Cleaned up ${cleanedCount} completed tasks\n`);
console.log('π All embedding queue tests passed!');
} catch (error) {
console.error('β Test failed:', error);
process.exit(1);
} finally {
await database.disconnect();
console.log('π‘ Database disconnected');
}
}
// Run the test
testEmbeddingQueue().catch((error) => {
console.error('β Unhandled test error:', error);
process.exit(1);
});