feat(frontend): expose processing tier pricing

This commit is contained in:
MMEXA
2026-07-11 12:27:09 +08:00
parent 0b30cc6b0f
commit 8f1070a451
25 changed files with 2488 additions and 340 deletions
@@ -0,0 +1,41 @@
import { afterEach, describe, expect, it } from 'vitest'
import { createApp, h, type App } from 'vue'
import ServiceTierFacts from '../ServiceTierFacts.vue'
const mountedApps: Array<{ app: App, root: HTMLElement }> = []
afterEach(() => {
for (const { app, root } of mountedApps.splice(0)) {
app.unmount()
root.remove()
}
})
describe('ServiceTierFacts', () => {
it('renders all three facts and marks a missing actual tier explicitly', () => {
const root = document.createElement('div')
document.body.appendChild(root)
const app = createApp({
render: () => h(ServiceTierFacts, {
requested: 'priority',
actual: null,
billing: 'flex',
}),
})
app.mount(root)
mountedApps.push({ app, root })
expect(root.querySelector('[data-testid="service-tier-facts"]')).not.toBeNull()
expect([...root.querySelectorAll('dt')].map(node => node.textContent?.trim())).toEqual([
'请求层级',
'实际层级',
'计费层级',
])
expect([...root.querySelectorAll('dd')].map(node => node.textContent?.trim())).toEqual([
'priority',
'-',
'flex',
])
})
})
@@ -295,6 +295,22 @@ describe('UsageRecordsTable', () => {
expect(root.textContent).toContain('fast')
})
it('uses the actual service tier when the provider changes processing class', () => {
const downgraded = mountUsageRecordsTable([buildRecord({
service_tier: 'priority',
actual_service_tier: 'default',
})])
expect(downgraded.textContent).not.toContain('fast')
expect(downgraded.querySelector('[title*="Requested service tier: priority"]')).not.toBeNull()
expect(downgraded.querySelector('[title*="Actual service tier: default"]')).not.toBeNull()
const upgraded = mountUsageRecordsTable([buildRecord({
service_tier: 'flex',
actual_service_tier: 'priority',
})])
expect(upgraded.textContent).toContain('fast')
})
it('offers embedding API formats in the usage record filter', () => {
const root = mountUsageRecordsTable([buildRecord({ api_format: 'openai:chat' })])