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

1""" 

2Tests for get_service_desk.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_get_service_desk_by_id(mock_jira_client): 

17 """Test fetching service desk by ID.""" 

18 from get_service_desk import get_service_desk 

19 

20 mock_jira_client.get_service_desk.return_value = { 

21 "id": "1", 

22 "projectId": "10000", 

23 "projectName": "IT Service Desk", 

24 "projectKey": "ITS" 

25 } 

26 

27 with patch('get_service_desk.get_jira_client', return_value=mock_jira_client): 

28 result = get_service_desk("1") 

29 

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") 

34 

35 

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 

39 

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 } 

49 

50 with patch('get_service_desk.get_jira_client', return_value=mock_jira_client): 

51 result = get_service_desk("1") 

52 

53 assert 'id' in result 

54 assert 'projectId' in result 

55 assert 'projectName' in result 

56 assert 'projectKey' in result 

57 

58 

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 

62 

63 service_desk = { 

64 "id": "1", 

65 "projectId": "10000", 

66 "projectName": "IT Service Desk", 

67 "projectKey": "ITS" 

68 } 

69 

70 format_service_desk_text(service_desk) 

71 

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 

77 

78 

79def test_format_json_output(mock_jira_client): 

80 """Test JSON output format.""" 

81 from get_service_desk import format_service_desk_json 

82 

83 service_desk = { 

84 "id": "1", 

85 "projectId": "10000", 

86 "projectName": "IT Service Desk", 

87 "projectKey": "ITS" 

88 } 

89 

90 json_output = format_service_desk_json(service_desk) 

91 parsed = json.loads(json_output) 

92 

93 assert parsed['id'] == "1" 

94 assert parsed['projectKey'] == "ITS" 

95 

96 

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 

101 

102 mock_jira_client.get_service_desk.side_effect = JiraError("Service desk not found") 

103 

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") 

107 

108 

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 

112 

113 service_desk = { 

114 "id": "1", 

115 "projectId": "10000", 

116 "projectName": "IT Service Desk", 

117 "projectKey": "ITS" 

118 } 

119 

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 } 

125 

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) 

128 

129 captured = capsys.readouterr() 

130 assert 'Request Types' in captured.out or '3' in captured.out