Coverage for tests / test_get_service_desk.py: 100%
55 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 get_service_desk.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_get_service_desk_by_id(mock_jira_client):
17 """Test fetching service desk by ID."""
18 from get_service_desk import get_service_desk
20 mock_jira_client.get_service_desk.return_value = {
21 "id": "1",
22 "projectId": "10000",
23 "projectName": "IT Service Desk",
24 "projectKey": "ITS"
25 }
27 with patch('get_service_desk.get_jira_client', return_value=mock_jira_client):
28 result = get_service_desk("1")
30 assert result is not None
31 assert result['id'] == "1"
32 assert result['projectKey'] == "ITS"
33 mock_jira_client.get_service_desk.assert_called_once_with("1")
36def test_service_desk_details(mock_jira_client):
37 """Test that all detail fields are present."""
38 from get_service_desk import get_service_desk
40 mock_jira_client.get_service_desk.return_value = {
41 "id": "1",
42 "projectId": "10000",
43 "projectName": "IT Service Desk",
44 "projectKey": "ITS",
45 "_links": {
46 "self": "https://test.atlassian.net/rest/servicedeskapi/servicedesk/1"
47 }
48 }
50 with patch('get_service_desk.get_jira_client', return_value=mock_jira_client):
51 result = get_service_desk("1")
53 assert 'id' in result
54 assert 'projectId' in result
55 assert 'projectName' in result
56 assert 'projectKey' in result
59def test_format_text_output(mock_jira_client, capsys):
60 """Test human-readable output with full details."""
61 from get_service_desk import format_service_desk_text
63 service_desk = {
64 "id": "1",
65 "projectId": "10000",
66 "projectName": "IT Service Desk",
67 "projectKey": "ITS"
68 }
70 format_service_desk_text(service_desk)
72 captured = capsys.readouterr()
73 assert 'Service Desk Details' in captured.out
74 assert 'IT Service Desk' in captured.out
75 assert 'ITS' in captured.out
76 assert 'ID:' in captured.out
79def test_format_json_output(mock_jira_client):
80 """Test JSON output format."""
81 from get_service_desk import format_service_desk_json
83 service_desk = {
84 "id": "1",
85 "projectId": "10000",
86 "projectName": "IT Service Desk",
87 "projectKey": "ITS"
88 }
90 json_output = format_service_desk_json(service_desk)
91 parsed = json.loads(json_output)
93 assert parsed['id'] == "1"
94 assert parsed['projectKey'] == "ITS"
97def test_service_desk_not_found(mock_jira_client):
98 """Test error when service desk ID doesn't exist."""
99 from get_service_desk import get_service_desk
100 from error_handler import JiraError
102 mock_jira_client.get_service_desk.side_effect = JiraError("Service desk not found")
104 with patch('get_service_desk.get_jira_client', return_value=mock_jira_client):
105 with pytest.raises(JiraError, match="Service desk not found"):
106 get_service_desk("999")
109def test_show_request_type_count(mock_jira_client, capsys):
110 """Test showing number of request types available."""
111 from get_service_desk import format_service_desk_text
113 service_desk = {
114 "id": "1",
115 "projectId": "10000",
116 "projectName": "IT Service Desk",
117 "projectKey": "ITS"
118 }
120 # Mock request types call
121 mock_jira_client.get_request_types.return_value = {
122 "values": [{"id": "25"}, {"id": "26"}, {"id": "27"}],
123 "size": 3
124 }
126 with patch('get_service_desk.get_jira_client', return_value=mock_jira_client):
127 format_service_desk_text(service_desk, show_request_types=True, client=mock_jira_client)
129 captured = capsys.readouterr()
130 assert 'Request Types' in captured.out or '3' in captured.out