Coverage for tests/output/table/test_table.py: 100%
38 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-02-09 12:09 +0100
« prev ^ index » next coverage.py v6.5.0, created at 2023-02-09 12:09 +0100
1from __future__ import annotations
3from typing import Any
4from typing import TypeVar
6import pytest
7import rich
8from hypothesis import given
9from pydantic import BaseModel
11from ..._strategies import COMPACT_TABLE_MODELS
12from harbor_cli.output.table import BuiltinTypeException
13from harbor_cli.output.table import EmptySequenceError
14from harbor_cli.output.table import get_renderable
16T = TypeVar("T", bound=BaseModel)
19@given(COMPACT_TABLE_MODELS)
20def test_get_renderable(obj: BaseModel) -> None:
21 renderable = get_renderable(obj)
22 assert renderable is not None
23 # Check that we can print it without errors
24 rich.print(renderable)
27@given(COMPACT_TABLE_MODELS)
28def test_get_renderable_as_sequence(model: BaseModel) -> None:
29 renderable_single = get_renderable([model])
30 assert renderable_single is not None
31 rich.print(renderable_single)
32 renderable_multi = get_renderable([model, model])
33 assert renderable_multi is not None
34 rich.print(renderable_multi)
37def test_get_renderable_empty_sequence() -> None:
38 with pytest.raises(EmptySequenceError):
39 get_renderable([])
42@pytest.mark.parametrize("obj", [1, "str", object(), dict()])
43@pytest.mark.parametrize("as_sequence", [True, False])
44def test_get_renderable_builtin(obj: Any, as_sequence: bool) -> None:
45 if as_sequence:
46 obj = [obj]
47 with pytest.raises(BuiltinTypeException):
48 get_renderable(obj)
51def test_get_renderable_list_of_list() -> None:
52 with pytest.raises(BuiltinTypeException):
53 get_renderable([[]]) # type: ignore