"""Читатели на реальных ОСВ из ../fixtures: все 66 файлов читаются быстро, outline и merged на месте.""" import time from pathlib import Path from typing import cast import pytest from src.contract import FileType from src.parser.readers import read_book, read_book_detected READ_SECONDS_LIMIT = 5.0 NAMED_XLS = "osv/schastl/2024-Q3/Оборотносальдовая ведомость по счету 62 за 3 квартал 2024 г..xls" # Строка 15 (1-based) — контрагент «МАЛЕЧКИНСКАЯ ПТИЦЕФАБРИКА ООО» под 62 → 62.01 → «БП Аренда» NAMED_XLS_ROW = 15 NAMED_XLS_OUTLINE = 3 @pytest.mark.fixtures def test_real_file_is_read_quickly_with_outline_and_merged(osv_file: Path) -> None: data = osv_file.read_bytes() started = time.perf_counter() sheets, warnings = read_book(data, cast(FileType, osv_file.suffix.lstrip(".").upper())) assert time.perf_counter() - started < READ_SECONDS_LIMIT assert warnings == [] assert sheets assert any(sheet.row_outline for sheet in sheets) assert all(level >= 1 for sheet in sheets for level in sheet.row_outline.values()) assert any(sheet.merged for sheet in sheets) assert any(sheet.cells for sheet in sheets) @pytest.mark.fixtures def test_named_xls_outline_level(fixtures_dir: Path) -> None: sheets, _ = read_book((fixtures_dir / NAMED_XLS).read_bytes(), "XLS") sheet = sheets[0] assert sheet.cell(NAMED_XLS_ROW, 1).text == "МАЛЕЧКИНСКАЯ ПТИЦЕФАБРИКА ООО" assert sheet.outline(NAMED_XLS_ROW) == NAMED_XLS_OUTLINE @pytest.mark.fixtures def test_biff8_content_with_xlsx_file_type_is_read_as_xls(fixtures_dir: Path) -> None: read = read_book_detected((fixtures_dir / NAMED_XLS).read_bytes(), "XLSX") assert read.mismatch == "file_type=XLSX, но содержимое BIFF8: прочитано как XLS" assert read.sheets[0].outline(NAMED_XLS_ROW) == NAMED_XLS_OUTLINE