from unittest.mock import AsyncMock, create_autospec import pandas as pd import pytest from src.backend.logic.reporting.report import export class TestReportExporter: _class = export.ReportExporter @pytest.fixture def instance(self): mock_db_client = create_autospec(export.DBClient) sample_config = export.AuditReport( audit_group_id=1, label_name="test", as_pdf=True, artist_image="test", ) return self._class(mock_db_client, sample_config) @pytest.mark.parametrize( "as_pdf, expected", [ (True, export.MIMETypes.PDF), ( False, export.MIMETypes.PPTX, ), ], ) def test_media_type(self, instance, as_pdf, expected): instance.config.as_pdf = as_pdf assert instance.media_type == expected @pytest.mark.parametrize( "as_pdf, expected", [ (True, export.FileTypes.PDF), ( False, export.FileTypes.PPTX, ), ], ) def test_file_extension(self, instance, as_pdf, expected): instance.config.as_pdf = as_pdf assert instance.file_extension == expected @pytest.mark.asyncio @pytest.mark.parametrize( "flag_rows, expect_df", [ ([], False), ( [{export.FlagTableColumns.RESOLUTION: export.FlagResolutions.IGNORE}], False, ), *[ ([{export.FlagTableColumns.RESOLUTION: [value]}], True) for value in ("", " ", None) ], ], ) async def test_get_qualified_flags(self, instance, flag_rows, expect_df): get_flags = AsyncMock(return_value=flag_rows) instance.db = AsyncMock(AuditGroups=AsyncMock(get_flags=get_flags)) result = await instance._get_qualified_flags(0) if expect_df: assert isinstance(result, pd.DataFrame) assert len(result) == 1 else: assert result is None @pytest.mark.parametrize( "starts_with, expected", [ ("flag", ["flag1", "FlaG2", "FLAG3"]), ("Flag2", ["FlaG2"]), ("flaG3", ["FLAG3"]), ], ) def test_resolutions_starts_with(self, instance, starts_with, expected): flags_df = pd.DataFrame( { export.FlagTableColumns.RESOLUTION: ["flag1", "FlaG2", "FLAG3"], } ) mask = instance._resolution_starts_with(flags_df)(starts_with) filtered_result = flags_df[mask] assert filtered_result[export.FlagTableColumns.RESOLUTION].tolist() == expected