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

1from __future__ import annotations 

2 

3from typing import Any 

4from typing import TypeVar 

5 

6import pytest 

7import rich 

8from hypothesis import given 

9from pydantic import BaseModel 

10 

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 

15 

16T = TypeVar("T", bound=BaseModel) 

17 

18 

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) 

25 

26 

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) 

35 

36 

37def test_get_renderable_empty_sequence() -> None: 

38 with pytest.raises(EmptySequenceError): 

39 get_renderable([]) 

40 

41 

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) 

49 

50 

51def test_get_renderable_list_of_list() -> None: 

52 with pytest.raises(BuiltinTypeException): 

53 get_renderable([[]]) # type: ignore