const { graphqlRequest } = require('./test-graphql-queries-only')
// 测试所有端性别逻辑修复效果
async function testAllGenderFixes() {
console.log('🧪 开始测试所有端性别逻辑修复效果...\n')
// 1. 测试数据库中的性别值
console.log('📊 1. 测试数据库中的性别值')
await testDatabaseGenderValues()
// 2. 模拟前端性别转换逻辑
console.log('\n🎨 2. 模拟前端性别转换逻辑')
testFrontendGenderMapping()
// 3. 模拟后端性别转换逻辑
console.log('\n⚙️ 3. 模拟后端性别转换逻辑')
testBackendGenderMapping()
console.log('\n✅ 性别逻辑测试完成!')
}
// 测试数据库中的性别值
async function testDatabaseGenderValues() {
try {
const query = `
query GetActivityPlayerApplications($activityId: ID, $page: Int, $size: Int) {
activityPlayerApplications(activityId: $activityId, page: $page, size: $size) {
id
playerName
phone
state
}
}
`
const variables = {
activityId: "1",
page: 0,
size: 5
}
const response = await graphqlRequest(query, variables)
const applications = response.data.activityPlayerApplications || []
console.log(`找到 ${applications.length} 个参赛人,开始检查前3个的详细信息...`)
for (let i = 0; i < Math.min(3, applications.length); i++) {
const app = applications[i]
await checkPlayerGenderDetail(app.id, app.playerName)
}
} catch (error) {
console.error('❌ 查询参赛人列表失败:', error.message)
}
}
// 检查单个参赛人的性别详情
async function checkPlayerGenderDetail(playerId, playerName) {
try {
const query = `
query GetActivityPlayerDetail($id: ID!) {
activityPlayerDetail(id: $id) {
playerInfo {
id
name
gender
education
birthday
}
regionInfo {
id
name
fullPath
}
}
}
`
const response = await graphqlRequest(query, { id: playerId })
const detail = response.data.activityPlayerDetail
if (detail && detail.playerInfo) {
const { gender, name } = detail.playerInfo
console.log(`\n👤 参赛人: ${name} (ID: ${playerId})`)
console.log(` 原始性别值: ${gender} (${typeof gender})`)
// 模拟各端的性别转换
console.log(' 各端转换结果:')
// WX端 - review.js getGenderText (已修复)
const wxReviewText = getGenderTextWxReview(gender)
console.log(` - WX端(review): ${wxReviewText}`)
// WX端 - 注册页面选择器显示 (已修复)
const wxRegistrationDisplay = getGenderDisplayWxRegistration(gender)
console.log(` - WX端(注册显示): ${wxRegistrationDisplay}`)
// Web端 - JudgeForm (正确)
const webJudgeForm = getGenderTextWebJudge(gender)
console.log(` - Web端(JudgeForm): ${webJudgeForm}`)
// Web端 - check-detail (已修复)
const webCheckDetail = getGenderTextWebCheckDetail(gender)
console.log(` - Web端(check-detail): ${webCheckDetail}`)
// Backend端 - UserResolver (正确)
const backendString = getGenderStringBackend(gender)
console.log(` - Backend端(字符串): ${backendString}`)
} else {
console.log(`❌ 未找到参赛人详情: ${playerName}`)
}
} catch (error) {
console.error(`❌ 查询参赛人详情失败 (${playerName}):`, error.message)
}
}
// 模拟各端的性别转换函数
// WX端 - review.js getGenderText (已修复)
function getGenderTextWxReview(gender) {
if (gender === 0) return '女'
if (gender === 1) return '男'
return '未填写'
}
// WX端 - 注册页面显示 (已修复)
function getGenderDisplayWxRegistration(gender) {
// genderOptions: ['男', '女']
// 数据库值1(男) -> 界面索引0 -> 显示'男'
// 数据库值0(女) -> 界面索引1 -> 显示'女'
const genderOptions = ['男', '女']
if (gender === 1) return genderOptions[0] // 男
if (gender === 0) return genderOptions[1] // 女
return '未选择'
}
// Web端 - JudgeForm (正确)
function getGenderTextWebJudge(gender) {
// 男
// 女
if (gender === 1) return '男'
if (gender === 0) return '女'
return '未填写'
}
// Web端 - check-detail (已修复)
function getGenderTextWebCheckDetail(gender) {
const genderMap = {
1: '男',
0: '女'
}
return genderMap[gender] || '-'
}
// Backend端 - UserResolver (正确)
function getGenderStringBackend(gender) {
// user.getGender() == 1 ? "MALE" : "FEMALE"
if (gender === 1) return 'MALE'
if (gender === 0) return 'FEMALE'
return null
}
// 测试前端性别映射逻辑
function testFrontendGenderMapping() {
console.log('测试前端性别映射逻辑:')
const testCases = [
{ dbValue: 1, expected: '男' },
{ dbValue: 0, expected: '女' },
{ dbValue: null, expected: '未填写' }
]
testCases.forEach(({ dbValue, expected }) => {
console.log(`\n数据库值: ${dbValue}`)
console.log(` WX端(review): ${getGenderTextWxReview(dbValue)} ${getGenderTextWxReview(dbValue) === expected ? '✅' : '❌'}`)
console.log(` WX端(注册): ${getGenderDisplayWxRegistration(dbValue)} ${getGenderDisplayWxRegistration(dbValue) === expected ? '✅' : '❌'}`)
console.log(` Web端(JudgeForm): ${getGenderTextWebJudge(dbValue)} ${getGenderTextWebJudge(dbValue) === expected ? '✅' : '❌'}`)
console.log(` Web端(check-detail): ${getGenderTextWebCheckDetail(dbValue)} ${getGenderTextWebCheckDetail(dbValue) === expected ? '✅' : '❌'}`)
})
}
// 测试后端性别映射逻辑
function testBackendGenderMapping() {
console.log('测试后端性别映射逻辑:')
const testCases = [
{ dbValue: 1, expected: 'MALE' },
{ dbValue: 0, expected: 'FEMALE' }
]
testCases.forEach(({ dbValue, expected }) => {
const result = getGenderStringBackend(dbValue)
console.log(`数据库值 ${dbValue} -> ${result} ${result === expected ? '✅' : '❌'}`)
})
// 测试字符串到数字的转换
console.log('\n测试字符串到数字的转换:')
const stringToNumber = {
'MALE': 1,
'FEMALE': 0
}
Object.entries(stringToNumber).forEach(([str, num]) => {
console.log(`${str} -> ${num} ✅`)
})
}
// 运行测试
testAllGenderFixes().catch(console.error)