summaryrefslogtreecommitdiffstats
path: root/tests/units/result_manager/test_models.py
blob: bc7ba8ac69d7a47601fa615fe06292aa2bb2ffe6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# Copyright (c) 2023-2024 Arista Networks, Inc.
# Use of this source code is governed by the Apache License 2.0
# that can be found in the LICENSE file.
"""ANTA Result Manager models unit tests."""
from __future__ import annotations

from typing import Any, Callable

import pytest

# Import as Result to avoid pytest collection
from anta.result_manager.models import TestResult as Result
from tests.data.json_data import TEST_RESULT_SET_STATUS
from tests.lib.fixture import DEVICE_NAME
from tests.lib.utils import generate_test_ids_dict


class TestTestResultModels:
    """Test components of anta.result_manager.models."""

    @pytest.mark.parametrize("data", TEST_RESULT_SET_STATUS, ids=generate_test_ids_dict)
    def test__is_status_foo(self, test_result_factory: Callable[[int], Result], data: dict[str, Any]) -> None:
        """Test TestResult.is_foo methods."""
        testresult = test_result_factory(1)
        assert testresult.result == "unset"
        assert len(testresult.messages) == 0
        if data["target"] == "success":
            testresult.is_success(data["message"])
            assert testresult.result == data["target"]
            assert data["message"] in testresult.messages
        if data["target"] == "failure":
            testresult.is_failure(data["message"])
            assert testresult.result == data["target"]
            assert data["message"] in testresult.messages
        if data["target"] == "error":
            testresult.is_error(data["message"])
            assert testresult.result == data["target"]
            assert data["message"] in testresult.messages
        if data["target"] == "skipped":
            testresult.is_skipped(data["message"])
            assert testresult.result == data["target"]
            assert data["message"] in testresult.messages
        # no helper for unset, testing _set_status
        if data["target"] == "unset":
            testresult._set_status("unset", data["message"])  # pylint: disable=W0212
            assert testresult.result == data["target"]
            assert data["message"] in testresult.messages

    @pytest.mark.parametrize("data", TEST_RESULT_SET_STATUS, ids=generate_test_ids_dict)
    def test____str__(self, test_result_factory: Callable[[int], Result], data: dict[str, Any]) -> None:
        """Test TestResult.__str__."""
        testresult = test_result_factory(1)
        assert testresult.result == "unset"
        assert len(testresult.messages) == 0
        testresult._set_status(data["target"], data["message"])  # pylint: disable=W0212
        assert testresult.result == data["target"]
        assert str(testresult) == f"Test 'VerifyTest1' (on '{DEVICE_NAME}'): Result '{data['target']}'\nMessages: {[data['message']]}"