Coverage for tests / test_list_request_types.py: 100%

65 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-25 10:07 -0500

1""" 

2Tests for list_request_types.py script. 

3""" 

4 

5import sys 

6import json 

7from pathlib import Path 

8from unittest.mock import patch, MagicMock 

9 

10import pytest 

11 

12# Add scripts directory to path 

13sys.path.insert(0, str(Path(__file__).parent.parent / 'scripts')) 

14 

15 

16def test_list_request_types(mock_jira_client): 

17 """Test fetching all request types for a service desk.""" 

18 from list_request_types import list_request_types 

19 

20 mock_jira_client.get_request_types.return_value = { 

21 "values": [ 

22 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"}, 

23 {"id": "26", "name": "Report incident", "description": "Report problem", "issueTypeId": "10002"} 

24 ], 

25 "size": 2 

26 } 

27 

28 with patch('list_request_types.get_jira_client', return_value=mock_jira_client): 

29 result = list_request_types("1") 

30 

31 assert result is not None 

32 assert 'values' in result 

33 assert len(result['values']) == 2 

34 

35 

36def test_request_type_required_fields(mock_jira_client): 

37 """Test that each request type has id, name, description, issueTypeId.""" 

38 from list_request_types import list_request_types 

39 

40 mock_jira_client.get_request_types.return_value = { 

41 "values": [ 

42 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"} 

43 ], 

44 "size": 1 

45 } 

46 

47 with patch('list_request_types.get_jira_client', return_value=mock_jira_client): 

48 result = list_request_types("1") 

49 

50 for rt in result['values']: 

51 assert 'id' in rt 

52 assert 'name' in rt 

53 assert 'description' in rt 

54 assert 'issueTypeId' in rt 

55 

56 

57def test_format_text_output(mock_jira_client, capsys): 

58 """Test human-readable table output.""" 

59 from list_request_types import format_request_types_text 

60 

61 request_types = { 

62 "values": [ 

63 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"}, 

64 {"id": "26", "name": "Report incident", "description": "Report problem", "issueTypeId": "10002"} 

65 ], 

66 "size": 2 

67 } 

68 

69 format_request_types_text(request_types, "IT Service Desk") 

70 

71 captured = capsys.readouterr() 

72 assert 'Request Types' in captured.out 

73 assert 'Get IT help' in captured.out 

74 assert 'Report incident' in captured.out 

75 assert 'Total: 2 request types' in captured.out 

76 

77 

78def test_format_json_output(mock_jira_client): 

79 """Test JSON output format.""" 

80 from list_request_types import format_request_types_json 

81 

82 request_types = { 

83 "values": [ 

84 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"} 

85 ], 

86 "size": 1 

87 } 

88 

89 json_output = format_request_types_json(request_types) 

90 parsed = json.loads(json_output) 

91 

92 assert 'values' in parsed 

93 assert len(parsed['values']) == 1 

94 

95 

96def test_filter_by_name(mock_jira_client): 

97 """Test filtering request types by name pattern.""" 

98 from list_request_types import filter_request_types 

99 

100 request_types = { 

101 "values": [ 

102 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"}, 

103 {"id": "26", "name": "Report incident", "description": "Report problem", "issueTypeId": "10002"} 

104 ], 

105 "size": 2 

106 } 

107 

108 filtered = filter_request_types(request_types, name_filter="incident") 

109 

110 assert len(filtered['values']) == 1 

111 assert filtered['values'][0]['name'] == "Report incident" 

112 

113 

114def test_show_issue_type_mapping(mock_jira_client, capsys): 

115 """Test showing underlying JIRA issue type.""" 

116 from list_request_types import format_request_types_text 

117 

118 request_types = { 

119 "values": [ 

120 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"} 

121 ], 

122 "size": 1 

123 } 

124 

125 format_request_types_text(request_types, "IT Service Desk", show_issue_types=True) 

126 

127 captured = capsys.readouterr() 

128 assert 'Issue Type' in captured.out or '10001' in captured.out 

129 

130 

131def test_service_desk_not_found(mock_jira_client): 

132 """Test error when service desk doesn't exist.""" 

133 from list_request_types import list_request_types 

134 from error_handler import JiraError 

135 

136 mock_jira_client.get_request_types.side_effect = JiraError("Service desk not found") 

137 

138 with patch('list_request_types.get_jira_client', return_value=mock_jira_client): 

139 with pytest.raises(JiraError, match="Service desk not found"): 

140 list_request_types("999") 

141 

142 

143def test_empty_request_types(capsys): 

144 """Test output when service desk has no request types.""" 

145 from list_request_types import format_request_types_text 

146 

147 empty_result = {'values': [], 'size': 0} 

148 format_request_types_text(empty_result, "IT Service Desk") 

149 

150 captured = capsys.readouterr() 

151 assert 'No request types found' in captured.out