From 7d0bf9c87fdf1cf0572895f6e7aac098c4f094ed Mon Sep 17 00:00:00 2001 From: "chihao.ou" Date: Wed, 30 Sep 2026 02:24:37 +0800 Subject: [PATCH] fix(usage): preserve zero user multipliers in cost details --- .../src/components/admin/usage/UsageTable.vue | 2 +- .../admin/usage/__tests__/UsageTable.spec.ts | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/admin/usage/UsageTable.vue b/frontend/src/components/admin/usage/UsageTable.vue index 364a3072e6..26565f28ad 100644 --- a/frontend/src/components/admin/usage/UsageTable.vue +++ b/frontend/src/components/admin/usage/UsageTable.vue @@ -497,7 +497,7 @@
{{ t('usage.rate') }} - {{ formatMultiplier(tooltipData?.rate_multiplier || 1) }}x + {{ formatMultiplier(tooltipData?.rate_multiplier ?? 1) }}x
{{ t('usage.original') }} diff --git a/frontend/src/components/admin/usage/__tests__/UsageTable.spec.ts b/frontend/src/components/admin/usage/__tests__/UsageTable.spec.ts index d915fa4c42..0b06dd80d3 100644 --- a/frontend/src/components/admin/usage/__tests__/UsageTable.spec.ts +++ b/frontend/src/components/admin/usage/__tests__/UsageTable.spec.ts @@ -225,6 +225,22 @@ describe('admin UsageTable tooltip', () => { expect(wrapper.get('[data-testid="native-compaction-badge"]').text()).toBe('Compaction') }) + it.each([ + [0, '0.0x'], + [0.5, '0.50x'], + [undefined, '1.00x'], + ])('shows the stored user rate %s in cost details', async (rate, expected) => { + const wrapper = mount(UsageTable, { + props: { data: [{ ...baseImageRow, rate_multiplier: rate }], loading: false, columns: [] }, + global: { stubs: { DataTable: DataTableStub, EmptyState: true, Icon: true, Teleport: true } }, + }) + const triggers = wrapper.findAll('.group.relative') + await triggers[triggers.length - 1].trigger('mouseenter') + const rateLabel = wrapper.get('.fixed').findAll('span').find(span => span.text() === 'Rate')! + expect(rateLabel.element.parentElement?.textContent).toContain(expected) + wrapper.unmount() + }) + it('shows service tier and billing breakdown in cost tooltip', async () => { const row = { request_id: 'req-admin-1',