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
« 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"""
5import sys
6import json
7from pathlib import Path
8from unittest.mock import patch, MagicMock
10import pytest
12# Add scripts directory to path
13sys.path.insert(0, str(Path(__file__).parent.parent / 'scripts'))
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
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 }
28 with patch('list_request_types.get_jira_client', return_value=mock_jira_client):
29 result = list_request_types("1")
31 assert result is not None
32 assert 'values' in result
33 assert len(result['values']) == 2
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
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 }
47 with patch('list_request_types.get_jira_client', return_value=mock_jira_client):
48 result = list_request_types("1")
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
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
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 }
69 format_request_types_text(request_types, "IT Service Desk")
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
78def test_format_json_output(mock_jira_client):
79 """Test JSON output format."""
80 from list_request_types import format_request_types_json
82 request_types = {
83 "values": [
84 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"}
85 ],
86 "size": 1
87 }
89 json_output = format_request_types_json(request_types)
90 parsed = json.loads(json_output)
92 assert 'values' in parsed
93 assert len(parsed['values']) == 1
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
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 }
108 filtered = filter_request_types(request_types, name_filter="incident")
110 assert len(filtered['values']) == 1
111 assert filtered['values'][0]['name'] == "Report incident"
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
118 request_types = {
119 "values": [
120 {"id": "25", "name": "Get IT help", "description": "Request help", "issueTypeId": "10001"}
121 ],
122 "size": 1
123 }
125 format_request_types_text(request_types, "IT Service Desk", show_issue_types=True)
127 captured = capsys.readouterr()
128 assert 'Issue Type' in captured.out or '10001' in captured.out
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
136 mock_jira_client.get_request_types.side_effect = JiraError("Service desk not found")
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")
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
147 empty_result = {'values': [], 'size': 0}
148 format_request_types_text(empty_result, "IT Service Desk")
150 captured = capsys.readouterr()
151 assert 'No request types found' in captured.out