Corp/backend/tests/integration/test_ldap_simple.py.old

201 lines
6.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Простые интеграционные тесты с реальным LDAP сервером.
ВАЖНО: Перед запуском запустите LDAP сервер:
cd backend
./ldap-test.sh start
Запуск тестов:
pytest tests/integration/test_ldap_simple.py -v
"""
import pytest
from rest_framework.test import APIClient
from employees.models import Employee
from tests.integration.conftest import ldap_search_user
@pytest.mark.django_db
def test_register_user_creates_in_ldap(ldap_test_settings, ldap_connection):
"""Регистрация пользователя создает запись в LDAP"""
client = APIClient()
# Arrange
username = "test_newuser"
user_data = {
"username": username,
"email": "test_newuser@test.local",
"password": "TestPassword123!",
"password_confirmation": "TestPassword123!",
"first_name": "Test",
"last_name": "User",
"telegram": "@test_newuser",
"birth_date": "1990-01-01",
"phone_number": "+79001234567",
}
# Act - регистрируем пользователя
response = client.post("/api/v1/auth/register/", user_data)
# Отладка - посмотрим что пришло
print(f"\n Response status: {response.status_code}")
print(f"Response data: {response.data}")
# Assert - проверяем что пользователь создался
assert response.status_code == 201, f"Expected 201, got {response.status_code}: {response.data}"
assert Employee.objects.filter(username=username).exists()
# Assert - проверяем что пользователь появился в LDAP
ldap_user = ldap_search_user(ldap_connection, username)
assert ldap_user is not None, "Пользователь должен быть создан в LDAP"
dn, attrs = ldap_user
assert b"test_newuser@test.local" in attrs.get("mail", [])
@pytest.mark.django_db
def test_verify_email_activates_in_ldap(ldap_test_settings, ldap_connection):
"""Верификация email активирует пользователя в LDAP"""
client = APIClient()
# Arrange - создаем пользователя
username = "test_verify"
user_data = {
"username": username,
"email": "test_verify@test.local",
"password": "TestPassword123!",
"password_confirmation": "TestPassword123!",
"first_name": "Test",
"last_name": "Verify",
}
response = client.post("/api/v1/auth/register/", user_data)
assert response.status_code == 201
# Получаем токен верификации
employee = Employee.objects.get(username=username)
token = employee.email_verification_token
# Act - верифицируем email
verify_response = client.post(
"/api/v1/employees/verify-email/",
{"token": token}
)
# Assert
assert verify_response.status_code == 200
# Проверяем что в LDAP пользователь активен
ldap_user = ldap_search_user(ldap_connection, username)
assert ldap_user is not None
dn, attrs = ldap_user
# TODO: Проверяем что accountStatus = active или аналогичное поле
@pytest.mark.django_db
def test_delete_user_removes_from_ldap(ldap_test_settings, ldap_connection):
"""Удаление пользователя удаляет его из LDAP"""
client = APIClient()
# Arrange - создаем пользователя
username = "test_delete"
user_data = {
"username": username,
"email": "test_delete@test.local",
"password": "TestPassword123!",
"password_confirmation": "TestPassword123!",
"first_name": "Test",
"last_name": "Delete",
}
response = client.post("/api/v1/auth/register/", user_data)
assert response.status_code == 201
# Проверяем что пользователь есть в LDAP
assert ldap_search_user(ldap_connection, username) is not None
# Act - удаляем пользователя
employee = Employee.objects.get(username=username)
employee.delete()
# Assert - проверяем что пользователя нет в LDAP
ldap_user = ldap_search_user(ldap_connection, username)
assert ldap_user is None, "Пользователь должен быть удален из LDAP"
@pytest.mark.django_db
def test_update_user_syncs_to_ldap(ldap_test_settings, ldap_connection):
"""Обновление данных пользователя синхронизируется в LDAP"""
client = APIClient()
# Arrange - создаем пользователя
username = "test_update"
user_data = {
"username": username,
"email": "test_update@test.local",
"password": "TestPassword123!",
"password_confirmation": "TestPassword123!",
"first_name": "Test",
"last_name": "Update",
}
response = client.post("/api/v1/auth/register/", user_data)
assert response.status_code == 201
# Act - обновляем email
employee = Employee.objects.get(username=username)
new_email = "new_email@test.local"
employee.email = new_email
employee.save()
# Assert - проверяем что email обновился в LDAP
ldap_user = ldap_search_user(ldap_connection, username)
assert ldap_user is not None
dn, attrs = ldap_user
assert new_email.encode() in attrs.get("mail", [])
@pytest.mark.django_db
def test_full_user_lifecycle_with_ldap(ldap_test_settings, ldap_connection):
"""Полный жизненный цикл пользователя: создание → верификация → обновление → удаление"""
client = APIClient()
username = "test_lifecycle"
# 1. Создание
user_data = {
"username": username,
"email": "lifecycle@test.local",
"password": "TestPassword123!",
"password_confirmation": "TestPassword123!",
"first_name": "Lifecycle",
"last_name": "Test",
}
response = client.post("/api/v1/auth/register/", user_data)
assert response.status_code == 201
assert ldap_search_user(ldap_connection, username) is not None
# 2. Верификация
employee = Employee.objects.get(username=username)
token = employee.email_verification_token
verify_response = client.post(
"/api/v1/employees/verify-email/",
{"token": token}
)
assert verify_response.status_code == 200
# 3. Обновление
employee.refresh_from_db()
employee.first_name = "Updated"
employee.save()
ldap_user = ldap_search_user(ldap_connection, username)
assert ldap_user is not None
# 4. Удаление
employee.delete()
assert ldap_search_user(ldap_connection, username) is None