import json

from evalscope.report import gen_table, get_report_list
from evalscope.report.report import Category, Metric, Report, Subset


def test_get_report_list_skips_non_report_json(tmp_path):
    reports_dir = tmp_path / 'reports'
    report_file = reports_dir / 'qwen-plus' / 'gdpval.json'
    submission_info_file = reports_dir / 'qwen-plus' / 'gdpval_submission' / 'submission_info.json'
    empty_report_like_file = reports_dir / 'qwen-plus' / 'empty_report_like.json'

    report = Report(
        name='qwen-plus@gdpval',
        dataset_name='gdpval',
        model_name='qwen-plus',
        metrics=[
            Metric(
                name='mean_submission_ready',
                categories=[
                    Category(
                        name=('default', ),
                        subsets=[Subset(name='default', score=0.8679, num=1)],
                    )
                ],
            )
        ],
    )
    report.to_json(str(report_file))

    submission_info_file.parent.mkdir(parents=True, exist_ok=True)
    with open(submission_info_file, 'w', encoding='utf-8') as f:
        json.dump({'benchmark': 'gdpval', 'samples': [{'id': 'case-1'}]}, f)
    with open(empty_report_like_file, 'w', encoding='utf-8') as f:
        json.dump({'name': 'empty', 'dataset_name': 'empty', 'model_name': 'qwen-plus', 'metrics': []}, f)

    reports = get_report_list([str(reports_dir)])
    assert len(reports) == 1
    assert reports[0].dataset_name == 'gdpval'
    assert reports[0].model_name == 'qwen-plus'

    table = gen_table(reports_path_list=[str(reports_dir)], add_overall_metric=True)
    assert 'gdpval' in table
    assert 'qwen-plus' in table
    assert 'default_dataset' not in table
