165 lines
6.8 KiB
TypeScript
165 lines
6.8 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import enUS from '../en-US'
|
|
|
|
describe('en-US translations', () => {
|
|
it('should contain all required sections', () => {
|
|
expect(enUS).toHaveProperty('common')
|
|
expect(enUS).toHaveProperty('navbar')
|
|
expect(enUS).toHaveProperty('tagsView')
|
|
expect(enUS).toHaveProperty('login')
|
|
expect(enUS).toHaveProperty('register')
|
|
expect(enUS).toHaveProperty('error')
|
|
})
|
|
|
|
it('should contain all common translations', () => {
|
|
expect(enUS.common).toHaveProperty('confirm')
|
|
expect(enUS.common).toHaveProperty('cancel')
|
|
expect(enUS.common).toHaveProperty('save')
|
|
expect(enUS.common).toHaveProperty('delete')
|
|
expect(enUS.common).toHaveProperty('edit')
|
|
expect(enUS.common).toHaveProperty('add')
|
|
expect(enUS.common).toHaveProperty('search')
|
|
expect(enUS.common).toHaveProperty('reset')
|
|
expect(enUS.common).toHaveProperty('submit')
|
|
expect(enUS.common).toHaveProperty('back')
|
|
expect(enUS.common).toHaveProperty('close')
|
|
expect(enUS.common).toHaveProperty('loading')
|
|
expect(enUS.common).toHaveProperty('success')
|
|
expect(enUS.common).toHaveProperty('error')
|
|
expect(enUS.common).toHaveProperty('warning')
|
|
expect(enUS.common).toHaveProperty('info')
|
|
})
|
|
|
|
it('should contain all navbar translations', () => {
|
|
expect(enUS.navbar).toHaveProperty('language')
|
|
expect(enUS.navbar).toHaveProperty('logout')
|
|
expect(enUS.navbar).toHaveProperty('fullscreen')
|
|
expect(enUS.navbar).toHaveProperty('exitFullscreen')
|
|
expect(enUS.navbar).toHaveProperty('size')
|
|
expect(enUS.navbar).toHaveProperty('theme')
|
|
expect(enUS.navbar).toHaveProperty('settings')
|
|
expect(enUS.navbar).toHaveProperty('dashboard')
|
|
expect(enUS.navbar).toHaveProperty('profile')
|
|
expect(enUS.navbar).toHaveProperty('focusMode')
|
|
expect(enUS.navbar).toHaveProperty('logoutConfirm')
|
|
expect(enUS.navbar).toHaveProperty('logoutConfirmTitle')
|
|
expect(enUS.navbar).toHaveProperty('logoutConfirmButton')
|
|
expect(enUS.navbar).toHaveProperty('logoutCancelButton')
|
|
})
|
|
|
|
it('should contain all tagsView translations', () => {
|
|
expect(enUS.tagsView).toHaveProperty('refreshPage')
|
|
expect(enUS.tagsView).toHaveProperty('closeCurrent')
|
|
expect(enUS.tagsView).toHaveProperty('closeOthers')
|
|
expect(enUS.tagsView).toHaveProperty('closeLeft')
|
|
expect(enUS.tagsView).toHaveProperty('closeRight')
|
|
expect(enUS.tagsView).toHaveProperty('closeAll')
|
|
})
|
|
|
|
it('should contain all login translations', () => {
|
|
expect(enUS.login).toHaveProperty('title')
|
|
expect(enUS.login).toHaveProperty('username')
|
|
expect(enUS.login).toHaveProperty('password')
|
|
expect(enUS.login).toHaveProperty('email')
|
|
expect(enUS.login).toHaveProperty('phonenumber')
|
|
expect(enUS.login).toHaveProperty('code')
|
|
expect(enUS.login).toHaveProperty('sendCode')
|
|
expect(enUS.login).toHaveProperty('loginButton')
|
|
expect(enUS.login).toHaveProperty('loginButtonLoading')
|
|
expect(enUS.login).toHaveProperty('rememberMe')
|
|
expect(enUS.login).toHaveProperty('autoRegister')
|
|
expect(enUS.login).toHaveProperty('noAccount')
|
|
expect(enUS.login).toHaveProperty('registerNow')
|
|
expect(enUS.login).toHaveProperty('usernameRequired')
|
|
expect(enUS.login).toHaveProperty('passwordRequired')
|
|
expect(enUS.login).toHaveProperty('codeRequired')
|
|
expect(enUS.login).toHaveProperty('emailRequired')
|
|
expect(enUS.login).toHaveProperty('phonenumberRequired')
|
|
})
|
|
|
|
it('should contain all register translations', () => {
|
|
expect(enUS.register).toHaveProperty('title')
|
|
expect(enUS.register).toHaveProperty('username')
|
|
expect(enUS.register).toHaveProperty('password')
|
|
expect(enUS.register).toHaveProperty('confirmPassword')
|
|
expect(enUS.register).toHaveProperty('email')
|
|
expect(enUS.register).toHaveProperty('phonenumber')
|
|
expect(enUS.register).toHaveProperty('code')
|
|
expect(enUS.register).toHaveProperty('sendCode')
|
|
expect(enUS.register).toHaveProperty('registerButton')
|
|
expect(enUS.register).toHaveProperty('registerButtonLoading')
|
|
expect(enUS.register).toHaveProperty('hasAccount')
|
|
expect(enUS.register).toHaveProperty('loginNow')
|
|
expect(enUS.register).toHaveProperty('usernameRequired')
|
|
expect(enUS.register).toHaveProperty('usernameLength')
|
|
expect(enUS.register).toHaveProperty('passwordRequired')
|
|
expect(enUS.register).toHaveProperty('passwordLength')
|
|
expect(enUS.register).toHaveProperty('passwordPattern')
|
|
expect(enUS.register).toHaveProperty('confirmPasswordRequired')
|
|
expect(enUS.register).toHaveProperty('confirmPasswordMismatch')
|
|
expect(enUS.register).toHaveProperty('codeRequired')
|
|
expect(enUS.register).toHaveProperty('emailRequired')
|
|
expect(enUS.register).toHaveProperty('phonenumberRequired')
|
|
expect(enUS.register).toHaveProperty('registerSuccess')
|
|
expect(enUS.register).toHaveProperty('registerSuccessTitle')
|
|
})
|
|
|
|
it('should contain all error translations', () => {
|
|
expect(enUS.error).toHaveProperty('authFailed')
|
|
expect(enUS.error).toHaveProperty('noPermission')
|
|
expect(enUS.error).toHaveProperty('notFound')
|
|
expect(enUS.error).toHaveProperty('default')
|
|
expect(enUS.error).toHaveProperty('networkError')
|
|
expect(enUS.error).toHaveProperty('timeout')
|
|
expect(enUS.error).toHaveProperty('systemError')
|
|
expect(enUS.error).toHaveProperty('sessionExpired')
|
|
expect(enUS.error).toHaveProperty('sessionExpiredTitle')
|
|
expect(enUS.error).toHaveProperty('relogin')
|
|
expect(enUS.error).toHaveProperty('invalidSession')
|
|
expect(enUS.error).toHaveProperty('dataProcessing')
|
|
expect(enUS.error).toHaveProperty('downloadError')
|
|
expect(enUS.error).toHaveProperty('downloading')
|
|
})
|
|
|
|
it('should have non-empty translation values', () => {
|
|
Object.values(enUS.common).forEach(value => {
|
|
expect(value).toBeTruthy()
|
|
expect(typeof value).toBe('string')
|
|
})
|
|
})
|
|
|
|
it('should support variable interpolation in registerSuccess', () => {
|
|
const username = 'testuser'
|
|
const message = enUS.register.registerSuccess.replace('{username}', username)
|
|
expect(message).toContain(username)
|
|
})
|
|
|
|
it('should support variable interpolation in systemError', () => {
|
|
const code = '404'
|
|
const message = enUS.error.systemError.replace('{code}', code)
|
|
expect(message).toContain(code)
|
|
})
|
|
|
|
it('should have matching keys with zh-CN', () => {
|
|
const zhCN = require('../zh-CN').default
|
|
const getKeys = (obj: any, prefix = ''): string[] => {
|
|
let keys: string[] = []
|
|
for (const key in obj) {
|
|
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
keys = keys.concat(getKeys(obj[key], prefix + key + '.'))
|
|
} else {
|
|
keys.push(prefix + key)
|
|
}
|
|
}
|
|
return keys
|
|
}
|
|
|
|
const zhCNKeys = getKeys(zhCN)
|
|
const enUSKeys = getKeys(enUS)
|
|
|
|
zhCNKeys.forEach(key => {
|
|
expect(enUSKeys).toContain(key)
|
|
})
|
|
})
|
|
})
|