Coverage for tests / test_create_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 create_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_create_service_desk(mock_jira_client): 

17 """Test creating a new service desk.""" 

18 from create_service_desk import create_service_desk 

19 

20 mock_jira_client.create_service_desk.return_value = { 

21 "id": "5", 

22 "projectId": "10005", 

23 "projectName": "New Service Desk", 

24 "projectKey": "NSD" 

25 } 

26 

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

28 result = create_service_desk("New Service Desk", "NSD", "com.atlassian.servicedesk:simplified-it-service-desk") 

29 

30 assert result is not None 

31 assert result['projectKey'] == "NSD" 

32 assert result['projectName'] == "New Service Desk" 

33 

34 

35def test_validate_project_key(mock_jira_client): 

36 """Test project key validation.""" 

37 from create_service_desk import validate_project_key 

38 

39 # Valid keys 

40 assert validate_project_key("NSD") == True 

41 assert validate_project_key("IT") == True 

42 assert validate_project_key("HR") == True 

43 

44 # Invalid keys 

45 assert validate_project_key("n") == False # Too short 

46 assert validate_project_key("TOOLONGKEY1") == False # Too long (11 chars) 

47 assert validate_project_key("123") == False # No letters 

48 assert validate_project_key("new-key") == False # Invalid chars 

49 

50 

51def test_dry_run_mode(mock_jira_client, capsys): 

52 """Test dry-run mode without creating.""" 

53 from create_service_desk import format_create_preview 

54 

55 format_create_preview("New Service Desk", "NSD", "com.atlassian.servicedesk:simplified-it-service-desk") 

56 

57 captured = capsys.readouterr() 

58 assert 'DRY RUN' in captured.out or 'Preview' in captured.out 

59 assert 'New Service Desk' in captured.out 

60 assert 'NSD' in captured.out 

61 

62 

63def test_format_text_output(mock_jira_client, capsys): 

64 """Test human-readable output.""" 

65 from create_service_desk import format_service_desk_created_text 

66 

67 service_desk = { 

68 "id": "5", 

69 "projectId": "10005", 

70 "projectName": "New Service Desk", 

71 "projectKey": "NSD" 

72 } 

73 

74 format_service_desk_created_text(service_desk) 

75 

76 captured = capsys.readouterr() 

77 assert 'Created Service Desk' in captured.out or 'Successfully created' in captured.out 

78 assert 'NSD' in captured.out 

79 

80 

81def test_format_json_output(mock_jira_client): 

82 """Test JSON output format.""" 

83 from create_service_desk import format_service_desk_created_json 

84 

85 service_desk = { 

86 "id": "5", 

87 "projectId": "10005", 

88 "projectName": "New Service Desk", 

89 "projectKey": "NSD" 

90 } 

91 

92 json_output = format_service_desk_created_json(service_desk) 

93 parsed = json.loads(json_output) 

94 

95 assert parsed['projectKey'] == "NSD" 

96 

97 

98def test_list_available_templates(mock_jira_client, capsys): 

99 """Test listing available project templates.""" 

100 from create_service_desk import list_available_templates 

101 

102 list_available_templates() 

103 

104 captured = capsys.readouterr() 

105 assert 'Available Templates' in captured.out or 'com.atlassian.servicedesk' in captured.out 

106 

107 

108def test_admin_permission_required(mock_jira_client): 

109 """Test that admin permission is required.""" 

110 from create_service_desk import create_service_desk 

111 from error_handler import JiraError 

112 

113 mock_jira_client.create_service_desk.side_effect = JiraError("Insufficient permissions") 

114 

115 with patch('create_service_desk.get_jira_client', return_value=mock_jira_client): 

116 with pytest.raises(JiraError, match="Insufficient permissions"): 

117 create_service_desk("New Service Desk", "NSD", "com.atlassian.servicedesk:simplified-it-service-desk")