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
« 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"""
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_create_service_desk(mock_jira_client):
17 """Test creating a new service desk."""
18 from create_service_desk import create_service_desk
20 mock_jira_client.create_service_desk.return_value = {
21 "id": "5",
22 "projectId": "10005",
23 "projectName": "New Service Desk",
24 "projectKey": "NSD"
25 }
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")
30 assert result is not None
31 assert result['projectKey'] == "NSD"
32 assert result['projectName'] == "New Service Desk"
35def test_validate_project_key(mock_jira_client):
36 """Test project key validation."""
37 from create_service_desk import validate_project_key
39 # Valid keys
40 assert validate_project_key("NSD") == True
41 assert validate_project_key("IT") == True
42 assert validate_project_key("HR") == True
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
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
55 format_create_preview("New Service Desk", "NSD", "com.atlassian.servicedesk:simplified-it-service-desk")
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
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
67 service_desk = {
68 "id": "5",
69 "projectId": "10005",
70 "projectName": "New Service Desk",
71 "projectKey": "NSD"
72 }
74 format_service_desk_created_text(service_desk)
76 captured = capsys.readouterr()
77 assert 'Created Service Desk' in captured.out or 'Successfully created' in captured.out
78 assert 'NSD' in captured.out
81def test_format_json_output(mock_jira_client):
82 """Test JSON output format."""
83 from create_service_desk import format_service_desk_created_json
85 service_desk = {
86 "id": "5",
87 "projectId": "10005",
88 "projectName": "New Service Desk",
89 "projectKey": "NSD"
90 }
92 json_output = format_service_desk_created_json(service_desk)
93 parsed = json.loads(json_output)
95 assert parsed['projectKey'] == "NSD"
98def test_list_available_templates(mock_jira_client, capsys):
99 """Test listing available project templates."""
100 from create_service_desk import list_available_templates
102 list_available_templates()
104 captured = capsys.readouterr()
105 assert 'Available Templates' in captured.out or 'com.atlassian.servicedesk' in captured.out
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
113 mock_jira_client.create_service_desk.side_effect = JiraError("Insufficient permissions")
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")