mirror of
https://github.com/langgenius/dify.git
synced 2025-08-12 19:27:37 +00:00
120 lines
4.3 KiB
TypeScript
120 lines
4.3 KiB
TypeScript
![]() |
/**
|
||
|
* Test suite for verifying upload feature translations across all locales
|
||
|
* Specifically tests for issue #23062: Missing Upload feature translations (esp. audioUpload) across most locales
|
||
|
*/
|
||
|
|
||
|
import fs from 'node:fs'
|
||
|
import path from 'node:path'
|
||
|
|
||
|
// Get all supported locales from the i18n directory
|
||
|
const I18N_DIR = path.join(__dirname, '../i18n')
|
||
|
const getSupportedLocales = (): string[] => {
|
||
|
return fs.readdirSync(I18N_DIR)
|
||
|
.filter(item => fs.statSync(path.join(I18N_DIR, item)).isDirectory())
|
||
|
.sort()
|
||
|
}
|
||
|
|
||
|
// Helper function to load translation file content
|
||
|
const loadTranslationContent = (locale: string): string => {
|
||
|
const filePath = path.join(I18N_DIR, locale, 'app-debug.ts')
|
||
|
|
||
|
if (!fs.existsSync(filePath))
|
||
|
throw new Error(`Translation file not found: ${filePath}`)
|
||
|
|
||
|
return fs.readFileSync(filePath, 'utf-8')
|
||
|
}
|
||
|
|
||
|
// Helper function to check if upload features exist
|
||
|
const hasUploadFeatures = (content: string): { [key: string]: boolean } => {
|
||
|
return {
|
||
|
fileUpload: /fileUpload\s*:\s*{/.test(content),
|
||
|
imageUpload: /imageUpload\s*:\s*{/.test(content),
|
||
|
documentUpload: /documentUpload\s*:\s*{/.test(content),
|
||
|
audioUpload: /audioUpload\s*:\s*{/.test(content),
|
||
|
featureBar: /bar\s*:\s*{/.test(content),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
describe('Upload Features i18n Translations - Issue #23062', () => {
|
||
|
let supportedLocales: string[]
|
||
|
|
||
|
beforeAll(() => {
|
||
|
supportedLocales = getSupportedLocales()
|
||
|
console.log(`Testing ${supportedLocales.length} locales for upload features`)
|
||
|
})
|
||
|
|
||
|
test('all locales should have translation files', () => {
|
||
|
supportedLocales.forEach((locale) => {
|
||
|
const filePath = path.join(I18N_DIR, locale, 'app-debug.ts')
|
||
|
expect(fs.existsSync(filePath)).toBe(true)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('all locales should have required upload features', () => {
|
||
|
const results: { [locale: string]: { [feature: string]: boolean } } = {}
|
||
|
|
||
|
supportedLocales.forEach((locale) => {
|
||
|
const content = loadTranslationContent(locale)
|
||
|
const features = hasUploadFeatures(content)
|
||
|
results[locale] = features
|
||
|
|
||
|
// Check that all upload features exist
|
||
|
expect(features.fileUpload).toBe(true)
|
||
|
expect(features.imageUpload).toBe(true)
|
||
|
expect(features.documentUpload).toBe(true)
|
||
|
expect(features.audioUpload).toBe(true)
|
||
|
expect(features.featureBar).toBe(true)
|
||
|
})
|
||
|
|
||
|
console.log('✅ All locales have complete upload features')
|
||
|
})
|
||
|
|
||
|
test('previously missing locales should now have audioUpload - Issue #23062', () => {
|
||
|
// These locales were specifically missing audioUpload
|
||
|
const previouslyMissingLocales = ['fa-IR', 'hi-IN', 'ro-RO', 'sl-SI', 'th-TH', 'uk-UA', 'vi-VN']
|
||
|
|
||
|
previouslyMissingLocales.forEach((locale) => {
|
||
|
const content = loadTranslationContent(locale)
|
||
|
|
||
|
// Verify audioUpload exists
|
||
|
expect(/audioUpload\s*:\s*{/.test(content)).toBe(true)
|
||
|
|
||
|
// Verify it has title and description
|
||
|
expect(/audioUpload[^}]*title\s*:/.test(content)).toBe(true)
|
||
|
expect(/audioUpload[^}]*description\s*:/.test(content)).toBe(true)
|
||
|
|
||
|
console.log(`✅ ${locale} - Issue #23062 resolved: audioUpload feature present`)
|
||
|
})
|
||
|
})
|
||
|
|
||
|
test('upload features should have required properties', () => {
|
||
|
supportedLocales.forEach((locale) => {
|
||
|
const content = loadTranslationContent(locale)
|
||
|
|
||
|
// Check fileUpload has required properties
|
||
|
if (/fileUpload\s*:\s*{/.test(content)) {
|
||
|
expect(/fileUpload[^}]*title\s*:/.test(content)).toBe(true)
|
||
|
expect(/fileUpload[^}]*description\s*:/.test(content)).toBe(true)
|
||
|
}
|
||
|
|
||
|
// Check imageUpload has required properties
|
||
|
if (/imageUpload\s*:\s*{/.test(content)) {
|
||
|
expect(/imageUpload[^}]*title\s*:/.test(content)).toBe(true)
|
||
|
expect(/imageUpload[^}]*description\s*:/.test(content)).toBe(true)
|
||
|
}
|
||
|
|
||
|
// Check documentUpload has required properties
|
||
|
if (/documentUpload\s*:\s*{/.test(content)) {
|
||
|
expect(/documentUpload[^}]*title\s*:/.test(content)).toBe(true)
|
||
|
expect(/documentUpload[^}]*description\s*:/.test(content)).toBe(true)
|
||
|
}
|
||
|
|
||
|
// Check audioUpload has required properties
|
||
|
if (/audioUpload\s*:\s*{/.test(content)) {
|
||
|
expect(/audioUpload[^}]*title\s*:/.test(content)).toBe(true)
|
||
|
expect(/audioUpload[^}]*description\s*:/.test(content)).toBe(true)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
})
|