Coverage for tests / test_list_service_desks.py: 100%

56 statements  

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

1""" 

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

17 """Test fetching all available service desks.""" 

18 from list_service_desks import list_service_desks 

19 

20 with patch('list_service_desks.get_jira_client', return_value=mock_jira_client): 

21 result = list_service_desks() 

22 

23 assert result is not None 

24 assert 'values' in result 

25 assert len(result['values']) == 3 

26 mock_jira_client.get_service_desks.assert_called_once() 

27 

28 

29def test_service_desk_has_required_fields(mock_jira_client): 

30 """Test that each service desk has id, projectId, projectName, projectKey.""" 

31 from list_service_desks import list_service_desks 

32 

33 with patch('list_service_desks.get_jira_client', return_value=mock_jira_client): 

34 result = list_service_desks() 

35 

36 for sd in result['values']: 

37 assert 'id' in sd 

38 assert 'projectId' in sd 

39 assert 'projectName' in sd 

40 assert 'projectKey' in sd 

41 

42 

43def test_format_text_output(mock_jira_client, capsys): 

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

45 from list_service_desks import format_service_desks_text 

46 

47 service_desks = mock_jira_client.get_service_desks() 

48 format_service_desks_text(service_desks) 

49 

50 captured = capsys.readouterr() 

51 assert 'Available Service Desks' in captured.out 

52 assert 'IT Service Desk' in captured.out 

53 assert 'HR Service Desk' in captured.out 

54 assert 'Total: 3 service desks' in captured.out 

55 

56 

57def test_format_json_output(mock_jira_client): 

58 """Test JSON output format.""" 

59 from list_service_desks import format_service_desks_json 

60 

61 service_desks = mock_jira_client.get_service_desks() 

62 json_output = format_service_desks_json(service_desks) 

63 

64 parsed = json.loads(json_output) 

65 assert 'values' in parsed 

66 assert len(parsed['values']) == 3 

67 

68 

69def test_filter_by_project_key(mock_jira_client): 

70 """Test filtering service desks by project key pattern.""" 

71 from list_service_desks import filter_service_desks 

72 

73 service_desks = mock_jira_client.get_service_desks() 

74 filtered = filter_service_desks(service_desks, project_key_filter='ITS') 

75 

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

77 assert filtered['values'][0]['projectKey'] == 'ITS' 

78 

79 

80def test_empty_service_desks(capsys): 

81 """Test output when no service desks exist.""" 

82 from list_service_desks import format_service_desks_text 

83 

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

85 format_service_desks_text(empty_result) 

86 

87 captured = capsys.readouterr() 

88 assert 'No service desks found' in captured.out 

89 

90 

91def test_pagination_handling(mock_jira_client): 

92 """Test handling paginated results (limit/start).""" 

93 from list_service_desks import list_service_desks 

94 

95 with patch('list_service_desks.get_jira_client', return_value=mock_jira_client): 

96 result = list_service_desks(start=0, limit=2) 

97 

98 mock_jira_client.get_service_desks.assert_called_with(start=0, limit=2)