Files
akmon/uni_modules/ak-ai-news/test/simple-test.uts
2026-01-20 08:04:15 +08:00

303 lines
8.1 KiB
Plaintext

// Simple Test for AI News System
import {
AIServiceManager,
AITranslationService,
AIContentAnalysisService,
type AIServiceConfig,
type ContentInfo
} from '../index.uts'
/**
* 简单的AI新闻系统测试
* 用于验证基本功能是否正常工作
*/
export class SimpleAINewsTest {
/**
* 测试翻译服务基本功能
*/
static async testTranslationService(): Promise<boolean> {
try {
console.log('🧪 Testing Translation Service...')
const config: AIServiceConfig = {
openai: {
apiKey: 'test-key',
model: 'gpt-3.5-turbo',
maxTokens: 1000,
temperature: 0.7
}
}
const translationService = new AITranslationService(config)
// 测试语言检测
const detection = await translationService.detectLanguage('Hello world')
if (!detection.success) {
console.error('❌ Language detection failed')
return false
}
// 测试翻译功能
const translation = await translationService.translateText(
'Hello world',
'zh-CN',
'en'
)
if (!translation.success) {
console.error('❌ Translation failed:', translation.error)
return false
}
console.log('✅ Translation service test passed')
return true
} catch (error) {
console.error('❌ Translation service test failed:', error)
return false
}
}
/**
* 测试内容分析服务基本功能
*/
static async testAnalysisService(): Promise<boolean> {
try {
console.log('🧪 Testing Content Analysis Service...')
const config: AIServiceConfig = {
openai: {
apiKey: 'test-key',
model: 'gpt-3.5-turbo',
maxTokens: 1000,
temperature: 0.7
}
}
const analysisService = new AIContentAnalysisService(config)
const testContent = '今天是个好天气,阳光明媚,让人心情愉快。'
const analysis = await analysisService.analyzeContent(testContent, {
types: ['sentiment', 'keywords', 'readability'],
language: 'zh-CN'
})
if (!analysis.success) {
console.error('❌ Content analysis failed:', analysis.error)
return false
}
if (!analysis.data) {
console.error('❌ Analysis data is missing')
return false
}
// 检查基本结果
if (typeof analysis.data.sentimentScore !== 'number') {
console.error('❌ Sentiment score is not a number')
return false
}
if (!Array.isArray(analysis.data.keywords)) {
console.error('❌ Keywords is not an array')
return false
}
console.log('✅ Content analysis service test passed')
return true
} catch (error) {
console.error('❌ Content analysis service test failed:', error)
return false
}
}
/**
* 测试服务管理器基本功能
*/
static async testServiceManager(): Promise<boolean> {
try {
console.log('🧪 Testing Service Manager...')
const config: AIServiceConfig = {
openai: {
apiKey: 'test-key',
model: 'gpt-3.5-turbo',
maxTokens: 1000,
temperature: 0.7
},
costLimits: {
dailyUSD: 100,
monthlyUSD: 1000,
perRequestUSD: 10
}
}
const serviceManager = new AIServiceManager(config)
// 测试初始化
const initResult = await serviceManager.initialize()
if (!initResult.success) {
console.error('❌ Service manager initialization failed:', initResult.error)
return false
}
// 测试服务获取
const translationService = serviceManager.getTranslationService()
if (!translationService) {
console.error('❌ Failed to get translation service')
return false
}
const analysisService = serviceManager.getAnalysisService()
if (!analysisService) {
console.error('❌ Failed to get analysis service')
return false
}
const chatService = serviceManager.getChatService()
if (!chatService) {
console.error('❌ Failed to get chat service')
return false
}
const recommendationService = serviceManager.getRecommendationService()
if (!recommendationService) {
console.error('❌ Failed to get recommendation service')
return false
}
// 测试提供商选择
const bestProvider = serviceManager.selectBestProvider()
if (!bestProvider) {
console.error('❌ Failed to select best provider')
return false
}
// 测试成本检查
const costCheck = serviceManager.checkCostLimits(1.0)
if (typeof costCheck !== 'boolean') {
console.error('❌ Cost check failed')
return false
}
// 获取统计信息
const stats = serviceManager.getManagerStatistics()
if (!stats) {
console.error('❌ Failed to get statistics')
return false
}
// 清理
await serviceManager.shutdown()
console.log('✅ Service manager test passed')
return true
} catch (error) {
console.error('❌ Service manager test failed:', error)
return false
}
}
/**
* 测试类型定义完整性
*/
static testTypeDefinitions(): boolean {
try {
console.log('🧪 Testing Type Definitions...')
// 测试基本类型是否可用
const testContent: ContentInfo = {
id: 'test-123',
title: '测试新闻',
content: '这是一条测试新闻内容',
originalLanguage: 'zh-CN',
publishedAt: Date.now(),
tags: ['测试'],
keywords: ['测试', '新闻'],
quality: 0.8,
viewCount: 0,
likeCount: 0,
shareCount: 0,
status: 'draft'
}
// 验证类型结构
if (typeof testContent.id !== 'string') {
console.error('❌ ContentInfo.id type error')
return false
}
if (typeof testContent.title !== 'string') {
console.error('❌ ContentInfo.title type error')
return false
}
if (!Array.isArray(testContent.tags)) {
console.error('❌ ContentInfo.tags type error')
return false
}
console.log('✅ Type definitions test passed')
return true
} catch (error) {
console.error('❌ Type definitions test failed:', error)
return false
}
}
/**
* 运行所有测试
*/
static async runAllTests(): Promise<boolean> {
console.log('🚀 Starting AI News System Tests...')
console.log('=====================================')
const results: boolean[] = []
// 运行各项测试
results.push(this.testTypeDefinitions())
results.push(await this.testTranslationService())
results.push(await this.testAnalysisService())
results.push(await this.testServiceManager())
// 统计结果
const passedCount = results.filter(r => r).length
const totalCount = results.length
console.log('\n📊 Test Results:')
console.log('================')
console.log(`✅ Passed: ${passedCount}`)
console.log(`❌ Failed: ${totalCount - passedCount}`)
console.log(`📈 Success Rate: ${((passedCount / totalCount) * 100).toFixed(1)}%`)
if (passedCount === totalCount) {
console.log('\n🎉 All tests passed! AI News System is working correctly.')
return true
} else {
console.log('\n💥 Some tests failed. Please check the errors above.')
return false
}
}
}
// 导出测试运行函数
export async function runSimpleTests(): Promise<boolean> {
return await SimpleAINewsTest.runAllTests()
}
// 如果直接运行此文件,执行测试
if (typeof require !== 'undefined' && require.main === module) {
runSimpleTests().then(success => {
process.exit(success ? 0 : 1)
}).catch(error => {
console.error('Test execution failed:', error)
process.exit(1)
})
}