summaryrefslogtreecommitdiff
path: root/frontend/src/lib/metricRow.test.ts
blob: a8149bdb3ef500a4445e68362575fa83f8b13bf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// @ts-nocheck
import { describe, expect, it, vi, afterEach } from 'vitest';
import { cleanup } from '@testing-library/svelte';
import { render, screen } from '@testing-library/svelte';

import ProjectMetricRow from '../components/ProjectMetricRow.svelte';

// Leader round2: 首页改为指标卡行——当前项目数、数据集总数、
// 运行中/已完成回测数、AI 用量;取不到的字段占位 "-"。
// 真实渲染断言,测试数据通过 props 注入。

afterEach(() => cleanup());

const projects = [{ id: 'p1' }, { id: 'p2' }, { id: 'p3' }];
const datasets = [{ id: 'd1' }, { id: 'd2' }];
const runs = [
  { id: 'r1', status: 'running', result: null },
  { id: 'r2', status: 'queued', result: null },
  { id: 'r3', status: 'succeeded', result: { metrics: {} } },
  { id: 'r4', status: 'succeeded', result: { metrics: {} } }
];

describe('ProjectMetricRow (real render, 4 metric cards)', () => {
  it('renders a metric-card row: 项目/数据集/回测 running+done/AI 用量, values visible', () => {
    const { container } = render(ProjectMetricRow, {
      props: {
        projects, datasets, runs,
        usage: { totals: { input_tokens: 1200, output_tokens: 340, requests: 7 } }
      }
    });
    const cards = container.querySelectorAll('[data-testid="metric-card"]');
    expect(cards.length).toBe(4);
    expect(screen.getByText('我的项目')).toBeTruthy();
    expect(screen.getByText('数据集')).toBeTruthy();
    expect(screen.getByText('回测')).toBeTruthy();
    expect(screen.getByText('AI 用量')).toBeTruthy();
    // 数字直接可见:项目卡/数据集卡与回测拆分值
    const values = [...container.querySelectorAll('.metric-row .mvalue')].map((n) => n.textContent!.replace(/\s+/g, ' ').trim());
    expect(values[0]).toBe('3');
    expect(values[1]).toBe('2');
    expect(values[2]).toContain('运行中');
    expect(values[2]).toContain('2');
    expect(values[2]).toContain('已完成');
    expect(values[2]).toContain('2');
    expect(screen.getByText('7 次')).toBeTruthy();
  });

  it('usage unavailable → "-" placeholder + TODO marker on the card', () => {
    const { container } = render(ProjectMetricRow, {
      props: { projects, datasets, runs, usage: null }
    });
    const cards = [...container.querySelectorAll('[data-testid="metric-card"]')];
    const usage = cards.at(-1)!;
    expect(usage.textContent).toContain('-');
    expect(usage.getAttribute('data-todo') ?? '').toContain('TODO');
  });

  it('runs card splits 运行中 / 已完成', () => {
    render(ProjectMetricRow, { props: { projects, datasets, runs, usage: null } });
    expect(screen.getByText(/运行中/)).toBeTruthy();
    expect(screen.getByText(/已完成/)).toBeTruthy();
  });
});