diff --git a/packages/shared-frontend-utils/src/formatUtil.ts b/packages/shared-frontend-utils/src/formatUtil.ts index 658498f1f..184651bf1 100644 --- a/packages/shared-frontend-utils/src/formatUtil.ts +++ b/packages/shared-frontend-utils/src/formatUtil.ts @@ -370,6 +370,10 @@ export function formatMetronomeCurrency( * This conversion is commonly used in financial systems to avoid floating-point precision issues * by representing monetary values as integers. * + * Note: Despite the function name and the field names in the API (e.g., `amount_micros`), + * some API responses actually return cents (1/100) instead of true micros (1/1,000,000). + * Use `formatMetronomeCurrency` for displaying balance amounts from the API. + * * @param usd - The amount in US dollars to convert * @returns The amount in microdollars (multiplied by 1,000,000) * @example diff --git a/tests-ui/tests/platform/cloud/subscription/composables/useSubscriptionCredits.test.ts b/tests-ui/tests/platform/cloud/subscription/composables/useSubscriptionCredits.test.ts index 11bd33445..7af7f47ee 100644 --- a/tests-ui/tests/platform/cloud/subscription/composables/useSubscriptionCredits.test.ts +++ b/tests-ui/tests/platform/cloud/subscription/composables/useSubscriptionCredits.test.ts @@ -60,9 +60,9 @@ vi.mock('@/stores/apiKeyAuthStore', () => ({ // Mock formatMetronomeCurrency vi.mock('@/utils/formatUtil', () => ({ - formatMetronomeCurrency: vi.fn((micros: number) => { - // Simple mock that converts micros to dollars - return (micros / 1000000).toFixed(2) + formatMetronomeCurrency: vi.fn((amount: number) => { + // Converts cents to dollars (despite the field name containing "micros") + return (amount / 100).toFixed(2) }) })) @@ -89,7 +89,7 @@ describe('useSubscriptionCredits', () => { }) it('should format amount_micros correctly', () => { - authStore.balance = { amount_micros: 5000000 } as any + authStore.balance = { amount_micros: 500 } as any const { totalCredits } = useSubscriptionCredits() expect(totalCredits.value).toBe('5.00') }) @@ -102,7 +102,7 @@ describe('useSubscriptionCredits', () => { throw new Error('Formatting error') }) - authStore.balance = { amount_micros: 5000000 } as any + authStore.balance = { amount_micros: 500 } as any const { totalCredits } = useSubscriptionCredits() expect(totalCredits.value).toBe('0.00') }) @@ -116,7 +116,7 @@ describe('useSubscriptionCredits', () => { }) it('should format cloud_credit_balance_micros correctly', () => { - authStore.balance = { cloud_credit_balance_micros: 2500000 } as any + authStore.balance = { cloud_credit_balance_micros: 250 } as any const { monthlyBonusCredits } = useSubscriptionCredits() expect(monthlyBonusCredits.value).toBe('2.50') }) @@ -130,7 +130,7 @@ describe('useSubscriptionCredits', () => { }) it('should format prepaid_balance_micros correctly', () => { - authStore.balance = { prepaid_balance_micros: 7500000 } as any + authStore.balance = { prepaid_balance_micros: 750 } as any const { prepaidCredits } = useSubscriptionCredits() expect(prepaidCredits.value).toBe('7.50') }) diff --git a/tests-ui/tests/store/modelToNodeStore.test.ts b/tests-ui/tests/store/modelToNodeStore.test.ts index c79af19b5..a53e884f4 100644 --- a/tests-ui/tests/store/modelToNodeStore.test.ts +++ b/tests-ui/tests/store/modelToNodeStore.test.ts @@ -449,7 +449,8 @@ describe('useModelToNodeStore', () => { const end = performance.now() // Should be fast enough for UI responsiveness - expect(end - start).toBeLessThan(10) + // Increased threshold to 50ms to account for system variability + expect(end - start).toBeLessThan(50) }) it('should handle invalid input types gracefully', () => {