app/utils/testDataConsistency.ts

94 lines
No EOL
3.4 KiB
TypeScript

/**
* Test Data Consistency Utilities
*
* Functions to verify that data is consistent across all interfaces
* after setup completion and synchronization
*/
export const testDataConsistency = () => {
const coopStore = useCoopBuilderStore()
const streamsStore = useStreamsStore()
const membersStore = useMembersStore()
const policiesStore = usePoliciesStore()
const issues: string[] = []
// Test streams consistency
if (coopStore.streams.length > 0 && streamsStore.streams.length > 0) {
if (coopStore.streams.length !== streamsStore.streams.length) {
issues.push(`Stream count mismatch: CoopBuilder(${coopStore.streams.length}) vs Legacy(${streamsStore.streams.length})`)
}
// Check if stream data matches
coopStore.streams.forEach(coopStream => {
const legacyStream = streamsStore.streams.find(s => s.id === coopStream.id)
if (!legacyStream) {
issues.push(`CoopBuilder stream "${coopStream.label}" not found in legacy store`)
} else {
if (legacyStream.name !== coopStream.label) {
issues.push(`Stream name mismatch for ${coopStream.id}: "${legacyStream.name}" vs "${coopStream.label}"`)
}
if (legacyStream.targetMonthlyAmount !== coopStream.monthly) {
issues.push(`Stream amount mismatch for ${coopStream.id}: ${legacyStream.targetMonthlyAmount} vs ${coopStream.monthly}`)
}
}
})
}
// Test members consistency
if (coopStore.members.length > 0 && membersStore.members.length > 0) {
if (coopStore.members.length !== membersStore.members.length) {
issues.push(`Member count mismatch: CoopBuilder(${coopStore.members.length}) vs Legacy(${membersStore.members.length})`)
}
// Check if member data matches
coopStore.members.forEach(coopMember => {
const legacyMember = membersStore.members.find(m => m.id === coopMember.id)
if (!legacyMember) {
issues.push(`CoopBuilder member "${coopMember.name}" not found in legacy store`)
} else {
if (legacyMember.displayName !== coopMember.name) {
issues.push(`Member name mismatch for ${coopMember.id}: "${legacyMember.displayName}" vs "${coopMember.name}"`)
}
}
})
}
// Test policies consistency
if (coopStore.equalHourlyWage > 0 && policiesStore.equalHourlyWage > 0) {
if (coopStore.equalHourlyWage !== policiesStore.equalHourlyWage) {
issues.push(`Hourly wage mismatch: CoopBuilder(${coopStore.equalHourlyWage}) vs Legacy(${policiesStore.equalHourlyWage})`)
}
if (coopStore.payrollOncostPct !== policiesStore.payrollOncostPct) {
issues.push(`Oncost percentage mismatch: CoopBuilder(${coopStore.payrollOncostPct}) vs Legacy(${policiesStore.payrollOncostPct})`)
}
}
return {
isConsistent: issues.length === 0,
issues,
summary: issues.length === 0
? 'All data is consistent across interfaces'
: `${issues.length} consistency issues found`
}
}
export const logDataConsistency = () => {
const result = testDataConsistency()
console.group('🔄 Data Consistency Check')
console.log('Status:', result.isConsistent ? '✅ Consistent' : '❌ Issues Found')
console.log('Summary:', result.summary)
if (result.issues.length > 0) {
console.group('Issues:')
result.issues.forEach((issue, index) => {
console.log(`${index + 1}. ${issue}`)
})
console.groupEnd()
}
console.groupEnd()
return result
}