78 lines
3.1 KiB
Python
78 lines
3.1 KiB
Python
import pytest
|
|
from unittest.mock import patch, AsyncMock, MagicMock
|
|
from src.services.user_service import user_service
|
|
from src.models.users import UserCreate, UserUpdate, UserStatus
|
|
from src.core.exceptions import UserNotFoundException, SambaAPIException
|
|
|
|
class TestUserService:
|
|
"""Test user service functionality"""
|
|
|
|
@patch('src.services.user_service.samba_service._run_samba_tool')
|
|
@patch('src.services.user_service.user_service.get_user')
|
|
async def test_create_user_success(self, mock_get_user, mock_run_samba_tool):
|
|
"""Test successful user creation"""
|
|
# Mock data
|
|
user_data = UserCreate(
|
|
username="testuser",
|
|
password="TestPassword123!",
|
|
first_name="Test",
|
|
last_name="User",
|
|
email="testuser@example.com"
|
|
)
|
|
|
|
# Mock samba-tool command
|
|
mock_run_samba_tool.return_value = {"returncode": 0, "stdout": "", "stderr": ""}
|
|
|
|
# Mock get_user response
|
|
from src.models.users import UserResponse
|
|
mock_user_response = UserResponse(
|
|
username="testuser",
|
|
first_name="Test",
|
|
last_name="User",
|
|
email="testuser@example.com",
|
|
dn="CN=testuser,CN=Users,DC=example,DC=com",
|
|
status=UserStatus.ACTIVE,
|
|
groups=[]
|
|
)
|
|
mock_get_user.return_value = mock_user_response
|
|
|
|
# Test user creation
|
|
result = await user_service.create_user(user_data)
|
|
|
|
assert result.username == "testuser"
|
|
assert result.first_name == "Test"
|
|
assert result.last_name == "User"
|
|
mock_run_samba_tool.assert_called_once()
|
|
|
|
@patch('src.services.user_service.samba_service._get_connection')
|
|
async def test_get_user_not_found(self, mock_get_connection):
|
|
"""Test get user when user doesn't exist"""
|
|
# Mock LDAP connection with empty results
|
|
mock_conn = MagicMock()
|
|
mock_conn.entries = []
|
|
mock_get_connection.return_value = mock_conn
|
|
|
|
with pytest.raises(UserNotFoundException):
|
|
await user_service.get_user("nonexistent")
|
|
|
|
@patch('src.services.user_service.samba_service._run_samba_tool')
|
|
async def test_delete_user_success(self, mock_run_samba_tool):
|
|
"""Test successful user deletion"""
|
|
mock_run_samba_tool.return_value = {"returncode": 0, "stdout": "", "stderr": ""}
|
|
|
|
result = await user_service.delete_user("testuser")
|
|
|
|
assert result is True
|
|
mock_run_samba_tool.assert_called_once_with(['user', 'delete', 'testuser'])
|
|
|
|
@patch('src.services.user_service.samba_service._run_samba_tool')
|
|
async def test_change_password_success(self, mock_run_samba_tool):
|
|
"""Test successful password change"""
|
|
mock_run_samba_tool.return_value = {"returncode": 0, "stdout": "", "stderr": ""}
|
|
|
|
result = await user_service.change_password("testuser", "NewPassword123!")
|
|
|
|
assert result is True
|
|
mock_run_samba_tool.assert_called_once_with([
|
|
'user', 'setpassword', 'testuser', '--newpassword', 'NewPassword123!'
|
|
]) |