Coverage for tests / unit / utils / conftest.py: 96%

51 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Pytest configuration for utility unit tests. 

2 

3Tests in this directory focus on utility functions including: 

4- ASCII normalization 

5- Enum and normalizer validation 

6- Subprocess validator functionality 

7- Timeout utilities 

8""" 

9 

10from __future__ import annotations 

11 

12from dataclasses import dataclass, field 

13from typing import TYPE_CHECKING, Any 

14 

15import pytest 

16 

17if TYPE_CHECKING: 

18 from collections.abc import Callable 

19 

20 

21@dataclass 

22class FakeToolResult: 

23 """Fake ToolResult for testing console/logger and summary output.""" 

24 

25 name: str = "test-tool" 

26 success: bool = True 

27 issues_count: int = 0 

28 output: str = "" 

29 issues: list[Any] = field(default_factory=list) 

30 fixed_issues_count: int | None = None 

31 remaining_issues_count: int | None = None 

32 pytest_summary: dict[str, Any] | None = None 

33 ai_metadata: dict[str, Any] | None = None 

34 

35 

36@dataclass 

37class FakeIssue: 

38 """Fake Issue for testing output formatters.""" 

39 

40 file: str = "test.py" 

41 line: int = 1 

42 column: int = 1 

43 code: str = "E001" 

44 message: str = "Test error" 

45 level: str = "error" 

46 

47 

48@pytest.fixture 

49def fake_tool_result() -> FakeToolResult: 

50 """Provide a FakeToolResult instance for testing. 

51 

52 Returns: 

53 FakeToolResult: Description of returned FakeToolResult. 

54 """ 

55 return FakeToolResult() 

56 

57 

58@pytest.fixture 

59def fake_tool_result_factory() -> Callable[..., FakeToolResult]: 

60 """Factory fixture to create FakeToolResult with custom attributes. 

61 

62 Returns: 

63 Callable[..., FakeToolResult]: Description of returned Callable[..., FakeToolResult]. 

64 """ 

65 

66 def _create(**kwargs: Any) -> FakeToolResult: 

67 return FakeToolResult(**kwargs) 

68 

69 return _create 

70 

71 

72@pytest.fixture 

73def fake_issue() -> FakeIssue: 

74 """Provide a FakeIssue instance for testing. 

75 

76 Returns: 

77 FakeIssue: Description of returned FakeIssue. 

78 """ 

79 return FakeIssue() 

80 

81 

82@pytest.fixture 

83def fake_issue_factory() -> Callable[..., FakeIssue]: 

84 """Factory fixture to create FakeIssue with custom attributes. 

85 

86 Returns: 

87 Callable[..., FakeIssue]: Description of returned Callable[..., FakeIssue]. 

88 """ 

89 

90 def _create(**kwargs: Any) -> FakeIssue: 

91 return FakeIssue(**kwargs) 

92 

93 return _create 

94 

95 

96@pytest.fixture 

97def console_capture() -> tuple[Callable[[str], None], list[str]]: 

98 """Capture console output for testing. 

99 

100 Returns: 

101 Tuple containing: 

102 - capture function that appends text to output list 

103 - output list containing captured text 

104 """ 

105 output: list[str] = [] 

106 

107 def capture(text: str = "", **_kwargs: Any) -> None: 

108 output.append(text) 

109 

110 return capture, output 

111 

112 

113@pytest.fixture 

114def console_capture_with_kwargs() -> ( 

115 tuple[Callable[..., None], list[tuple[str, dict[str, Any]]]] 

116): 

117 """Capture console output with kwargs for testing. 

118 

119 Returns: 

120 Tuple containing: 

121 - capture function that appends (text, kwargs) tuples 

122 - output list containing captured (text, kwargs) tuples 

123 """ 

124 output: list[tuple[str, dict[str, Any]]] = [] 

125 

126 def capture(text: str = "", **kwargs: Any) -> None: 

127 output.append((text, kwargs)) 

128 

129 return capture, output