1
0
Fork 0
anta/tests/units/result_manager/conftest.py
Daniel Baumann 2044ea6182
Merging upstream version 1.1.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-02-05 11:54:55 +01:00

85 lines
2.6 KiB
Python

# 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.
"""See https://docs.pytest.org/en/stable/reference/fixtures.html#conftest-py-sharing-fixtures-across-multiple-files."""
import json
from pathlib import Path
from typing import Callable
import pytest
from anta.device import AntaDevice
from anta.result_manager import ResultManager
from anta.result_manager.models import TestResult
TEST_RESULTS: Path = Path(__file__).parent.resolve() / "test_files" / "test_md_report_results.json"
@pytest.fixture
def result_manager_factory(list_result_factory: Callable[[int], list[TestResult]]) -> Callable[[int], ResultManager]:
"""Return a ResultManager factory that takes as input a number of tests."""
# pylint: disable=redefined-outer-name
def _factory(number: int = 0) -> ResultManager:
"""Create a factory for list[TestResult] entry of size entries."""
result_manager = ResultManager()
result_manager.results = list_result_factory(number)
return result_manager
return _factory
@pytest.fixture
def result_manager() -> ResultManager:
"""Return a ResultManager with 30 random tests loaded from a JSON file.
Devices: DC1-SPINE1, DC1-LEAF1A
- Total tests: 30
- Success: 7
- Skipped: 2
- Failure: 19
- Error: 2
See `tests/units/result_manager/test_md_report_results.json` for details.
"""
manager = ResultManager()
with TEST_RESULTS.open("r", encoding="utf-8") as f:
results = json.load(f)
for result in results:
manager.add(TestResult(**result))
return manager
@pytest.fixture
def test_result_factory(device: AntaDevice) -> Callable[[int], TestResult]:
"""Return a anta.result_manager.models.TestResult object."""
# pylint: disable=redefined-outer-name
def _create(index: int = 0) -> TestResult:
"""Actual Factory."""
return TestResult(
name=device.name,
test=f"VerifyTest{index}",
categories=["test"],
description=f"Verifies Test {index}",
custom_field=None,
)
return _create
@pytest.fixture
def list_result_factory(test_result_factory: Callable[[int], TestResult]) -> Callable[[int], list[TestResult]]:
"""Return a list[TestResult] with 'size' TestResult instantiated using the test_result_factory fixture."""
# pylint: disable=redefined-outer-name
def _factory(size: int = 0) -> list[TestResult]:
"""Create a factory for list[TestResult] entry of size entries."""
return [test_result_factory(i) for i in range(size)]
return _factory