Files
Maison/samba-api/tests/test_user_service.py
2026-02-10 12:12:11 +01:00

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!'
])