From 12e97605c4652b2580ddeb7d061c094d833dbefc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Priit=20L=C3=A4tt?= <lattpriit@gmail.com>
Date: Fri, 11 Oct 2024 18:02:48 +0300
Subject: [PATCH] Refactor test

---
 .../converter/test_xcode_16_converter.py      | 261 ++++++++----------
 1 file changed, 109 insertions(+), 152 deletions(-)

diff --git a/tests/models/xctests/converter/test_xcode_16_converter.py b/tests/models/xctests/converter/test_xcode_16_converter.py
index 6a971970..0fbaa9c5 100644
--- a/tests/models/xctests/converter/test_xcode_16_converter.py
+++ b/tests/models/xctests/converter/test_xcode_16_converter.py
@@ -1,4 +1,4 @@
-import pathlib
+from typing import List
 from unittest import mock
 
 import pytest
@@ -6,17 +6,11 @@
 from codemagic.models.junit import Property
 from codemagic.models.junit import Skipped
 from codemagic.models.junit import TestCase
-from codemagic.models.junit import TestSuite
 from codemagic.models.junit import TestSuites
 from codemagic.models.xctests import XcResultTool
 from codemagic.models.xctests.converter import Xcode16XcResultConverter
 
 
-@pytest.fixture
-def xcresult() -> pathlib.Path:
-    return pathlib.Path(__file__).parent / "mocks" / "Test.xcresult"
-
-
 def _get_test_report_tests(_):
     return {
         "devices": [
@@ -221,153 +215,116 @@ def _get_test_report_summary(_):
     }
 
 
+@pytest.fixture
+def expected_device_properties() -> List[Property]:
+    return [
+        Property(name="device_architecture", value="arm64"),
+        Property(name="device_identifier", value="D4A58F38-8890-43BE-93F9-3D268010475D"),
+        Property(name="device_name", value="iPhone SE (3rd generation)"),
+        Property(name="device_operating_system", value="18.0"),
+        Property(name="device_platform", value="iOS Simulator"),
+    ]
+
+
 @mock.patch.object(XcResultTool, "get_test_report_tests", _get_test_report_tests)
 @mock.patch.object(XcResultTool, "get_test_report_summary", _get_test_report_summary)
-def test_converter(xcresult):
-    test_suites: TestSuites = Xcode16XcResultConverter(xcresult).convert()
+def test_converter(expected_device_properties):
+    test_suites: TestSuites = Xcode16XcResultConverter(...).convert()
 
-    expected_test_suites = TestSuites(
-        name="Test - banaan",
-        test_suites=[
-            TestSuite(
-                name="banaanTests [iOS 18.0 iPhone SE (3rd generation)]",
-                tests=6,
-                disabled=0,
-                errors=0,
-                failures=2,
-                package="banaanTests",
-                skipped=1,
-                time=0.46875,
-                timestamp="2024-10-09T14:28:25",
-                properties=[
-                    Property(name="device_architecture", value="arm64"),
-                    Property(name="device_identifier", value="D4A58F38-8890-43BE-93F9-3D268010475D"),
-                    Property(name="device_name", value="iPhone SE (3rd generation)"),
-                    Property(name="device_operating_system", value="18.0"),
-                    Property(name="device_platform", value="iOS Simulator"),
-                    Property(name="ended_time", value="2024-10-09T14:28:25"),
-                    Property(name="started_time", value="2024-10-09T14:27:02"),
-                    Property(name="title", value="banaanTests"),
-                ],
-                testcases=[
-                    TestCase(
-                        classname="banaanTests",
-                        name="testDisabledExample()",
-                        assertions=None,
-                        status="Passed",
-                        time=0.0011,
-                        error=None,
-                        failure=None,
-                        skipped=None,
-                    ),
-                    TestCase(
-                        classname="banaanTests",
-                        name="testExample()",
-                        assertions=None,
-                        status="Passed",
-                        time=0.00045,
-                        error=None,
-                        failure=None,
-                        skipped=None,
-                    ),
-                    TestCase(
-                        classname="banaanTests",
-                        name="testExceptionExample()",
-                        assertions=None,
-                        status="Failed",
-                        time=0.2,
-                        error=None,
-                        failure=Failure(
-                            message='banaanTests.swift:50: failed: caught error: "badInput"',
-                            type="Error",
-                            failure_description=None,
-                        ),
-                        skipped=None,
-                    ),
-                    TestCase(
-                        classname="banaanTests",
-                        name="testFailExample()",
-                        assertions=None,
-                        status="Failed",
-                        time=0.002,
-                        error=None,
-                        failure=Failure(
-                            message="banaanTests.swift:44: failed - This won't make the cut",
-                            type="Failure",
-                            failure_description=None,
-                        ),
-                        skipped=None,
-                    ),
-                    TestCase(
-                        classname="banaanTests",
-                        name="testPerformanceExample()",
-                        assertions=None,
-                        status="Passed",
-                        time=0.26,
-                        error=None,
-                        failure=None,
-                        skipped=None,
-                    ),
-                    TestCase(
-                        classname="banaanTests",
-                        name="testSkippedExample()",
-                        assertions=None,
-                        status="Skipped",
-                        time=0.0052,
-                        error=None,
-                        failure=None,
-                        skipped=Skipped(message="Test skipped - This test is skipped"),
-                    ),
-                ],
-            ),
-            TestSuite(
-                name="banaanUITests [iOS 18.0 iPhone SE (3rd generation)]",
-                tests=2,
-                disabled=0,
-                errors=0,
-                failures=1,
-                package="banaanUITests",
-                skipped=0,
-                time=5.0,
-                timestamp="2024-10-09T14:28:25",
-                properties=[
-                    Property(name="device_architecture", value="arm64"),
-                    Property(name="device_identifier", value="D4A58F38-8890-43BE-93F9-3D268010475D"),
-                    Property(name="device_name", value="iPhone SE (3rd generation)"),
-                    Property(name="device_operating_system", value="18.0"),
-                    Property(name="device_platform", value="iOS Simulator"),
-                    Property(name="ended_time", value="2024-10-09T14:28:25"),
-                    Property(name="started_time", value="2024-10-09T14:27:02"),
-                    Property(name="title", value="banaanUITests"),
-                ],
-                testcases=[
-                    TestCase(
-                        classname="banaanUITests",
-                        name="testUIExample()",
-                        assertions=None,
-                        status="Passed",
-                        time=2.0,
-                        error=None,
-                        failure=None,
-                        skipped=None,
-                    ),
-                    TestCase(
-                        classname="banaanUITests",
-                        name="testUIFailExample()",
-                        assertions=None,
-                        status="Failed",
-                        time=3.0,
-                        error=None,
-                        failure=Failure(
-                            message="banaanUITests.swift:40: failed - Bad UI",
-                            type="Failure",
-                            failure_description=None,
-                        ),
-                        skipped=None,
-                    ),
-                ],
-            ),
-        ],
+    assert test_suites.name == "Test - banaan"
+    assert test_suites.disabled == 0
+    assert test_suites.errors == 0
+    assert test_suites.failures == 3
+    assert test_suites.skipped == 1
+    assert test_suites.tests == 8
+    assert test_suites.time == 5.46875
+    assert len(test_suites.test_suites) == 2
+
+    ts = test_suites.test_suites[0]  # Unit tests testsuite assertions
+    assert ts.disabled == 0
+    assert ts.errors == 0
+    assert ts.failures == 2
+    assert ts.name == "banaanTests [iOS 18.0 iPhone SE (3rd generation)]"
+    assert ts.package == "banaanTests"
+    assert ts.skipped == 1
+    assert ts.tests == 6
+    assert ts.time == 0.46875
+    assert ts.timestamp == "2024-10-09T14:28:25"
+    assert ts.properties == [
+        *expected_device_properties,
+        Property(name="ended_time", value="2024-10-09T14:28:25"),
+        Property(name="started_time", value="2024-10-09T14:27:02"),
+        Property(name="title", value="banaanTests"),
+    ]
+    assert len(ts.testcases) == 6
+    assert ts.testcases[0] == TestCase(
+        classname="banaanTests",
+        name="testDisabledExample()",
+        status="Passed",
+        time=0.0011,
+    )
+    assert ts.testcases[1] == TestCase(
+        classname="banaanTests",
+        name="testExample()",
+        status="Passed",
+        time=0.00045,
+    )
+    assert ts.testcases[2] == TestCase(
+        classname="banaanTests",
+        name="testExceptionExample()",
+        status="Failed",
+        time=0.2,
+        failure=Failure(message='banaanTests.swift:50: failed: caught error: "badInput"', type="Error"),
+    )
+    assert ts.testcases[3] == TestCase(
+        classname="banaanTests",
+        name="testFailExample()",
+        status="Failed",
+        time=0.002,
+        failure=Failure(message="banaanTests.swift:44: failed - This won't make the cut", type="Failure"),
     )
+    assert ts.testcases[4] == TestCase(
+        classname="banaanTests",
+        name="testPerformanceExample()",
+        status="Passed",
+        time=0.26,
+    )
+    assert ts.testcases[5] == TestCase(
+        classname="banaanTests",
+        name="testSkippedExample()",
+        status="Skipped",
+        time=0.0052,
+        skipped=Skipped(message="Test skipped - This test is skipped"),
+    )
+
+    ts = test_suites.test_suites[1]  # UI tests testsuite assertions
+    assert ts.disabled == 0
+    assert ts.errors == 0
+    assert ts.failures == 1
+    assert ts.name == "banaanUITests [iOS 18.0 iPhone SE (3rd generation)]"
+    assert ts.package == "banaanUITests"
+    assert ts.skipped == 0
+    assert ts.tests == 2
+    assert ts.time == 5.0
+    assert ts.timestamp == "2024-10-09T14:28:25"
+    assert ts.properties == [
+        *expected_device_properties,
+        Property(name="ended_time", value="2024-10-09T14:28:25"),
+        Property(name="started_time", value="2024-10-09T14:27:02"),
+        Property(name="title", value="banaanUITests"),
+    ]
 
-    assert test_suites == expected_test_suites
+    assert len(ts.testcases) == 2
+    assert ts.testcases[0] == TestCase(
+        classname="banaanUITests",
+        name="testUIExample()",
+        status="Passed",
+        time=2.0,
+    )
+    assert ts.testcases[1] == TestCase(
+        classname="banaanUITests",
+        name="testUIFailExample()",
+        status="Failed",
+        time=3.0,
+        failure=Failure(message="banaanUITests.swift:40: failed - Bad UI", type="Failure"),
+    )