@@ -0,0 +1,73 @@
|
||||
"""parse_export_sections для analytics export."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from app.services.analytics.export_context import net_rub_display, net_rub_dominant_hint
|
||||
from app.services.analytics.pdf_export import (
|
||||
_COMPARISON_COL_WIDTHS,
|
||||
_DETAIL_COL_PCT,
|
||||
_DETAIL_COL_WIDTHS,
|
||||
_USABLE_WIDTH,
|
||||
_format_rub,
|
||||
_format_rub_plain,
|
||||
_widths_from_percentages,
|
||||
)
|
||||
from app.services.analytics.export_sections import (
|
||||
export_filename_base,
|
||||
parse_export_sections,
|
||||
)
|
||||
|
||||
|
||||
class ExportSectionsTests(unittest.TestCase):
|
||||
def test_all_by_default(self) -> None:
|
||||
self.assertEqual(
|
||||
parse_export_sections(None),
|
||||
frozenset({"summary", "comparison", "reports"}),
|
||||
)
|
||||
self.assertEqual(parse_export_sections("all"), parse_export_sections(None))
|
||||
|
||||
def test_single_section(self) -> None:
|
||||
self.assertEqual(parse_export_sections("summary"), frozenset({"summary"}))
|
||||
|
||||
def test_filename_all(self) -> None:
|
||||
name = export_filename_base(
|
||||
date_from="2026-06-01",
|
||||
date_to="2026-06-07",
|
||||
sections=frozenset({"summary", "comparison", "reports"}),
|
||||
)
|
||||
self.assertEqual(name, "otchety_2026-06-01_2026-06-07")
|
||||
|
||||
def test_filename_summary(self) -> None:
|
||||
name = export_filename_base(
|
||||
date_from="2026-06-01",
|
||||
date_to="2026-06-07",
|
||||
sections=frozenset({"summary"}),
|
||||
)
|
||||
self.assertEqual(name, "itogi_2026-06-01_2026-06-07")
|
||||
|
||||
def test_net_rub_display_without_minus(self) -> None:
|
||||
self.assertEqual(net_rub_display({"netRub": -23480.99}), 23480.99)
|
||||
self.assertEqual(net_rub_display({"netRub": 1500.0}), 1500.0)
|
||||
|
||||
def test_net_rub_dominant_hint(self) -> None:
|
||||
self.assertIn("надоев", net_rub_dominant_hint({"dominantIssue": "underload"}))
|
||||
self.assertIn("перерасход", net_rub_dominant_hint({"dominantIssue": "overload"}))
|
||||
|
||||
def test_pdf_rub_format_without_sign_or_ruble_symbol(self) -> None:
|
||||
self.assertEqual(_format_rub(-23480.99), "23 481 руб.")
|
||||
self.assertNotIn("₽", _format_rub(1500))
|
||||
self.assertEqual(_format_rub_plain(-10154), "10 154")
|
||||
|
||||
def test_pdf_table_widths_fit_landscape_page(self) -> None:
|
||||
comparison_total = sum(_COMPARISON_COL_WIDTHS)
|
||||
detail_total = sum(_DETAIL_COL_WIDTHS)
|
||||
self.assertLessEqual(comparison_total, _USABLE_WIDTH + 0.1)
|
||||
self.assertLessEqual(detail_total, _USABLE_WIDTH + 0.1)
|
||||
self.assertEqual(sum(_DETAIL_COL_PCT), 100)
|
||||
self.assertAlmostEqual(detail_total, _USABLE_WIDTH, places=1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user