Corp/backend/tests/integration/README_NEW.md

6.9 KiB
Raw Blame History

🧪 Интеграционные тесты с LDAP

Простые интеграционные тесты с реальным LDAP сервером.

🎯 Подход

Держите LDAP сервер запущенным постоянно во время разработки.

Не нужны сложные фикстуры для управления Docker - просто запустите LDAP один раз и пишите обычные pytest тесты.

🚀 Быстрый старт

1. Запустите LDAP сервер (один раз)

cd backend
./ldap-test.sh start

LDAP сервер запустится в Docker и будет работать в фоне.

2. Запустите тесты

# Все интеграционные тесты
pytest tests/integration/ -v

# Конкретный тест
pytest tests/integration/test_ldap_simple.py::TestLDAPIntegration::test_register_user_creates_in_ldap -v

# С подробным выводом
pytest tests/integration/ -v -s

3. Пишите новые тесты

Используйте простые фикстуры из conftest.py:

@pytest.mark.django_db
def test_my_feature(self, ldap_test_settings, ldap_connection):
    """Мой тест с LDAP"""
    # Arrange
    username = "test_myfeature"
    
    # Act
    # ... ваш код ...
    
    # Assert - проверка в LDAP
    from .conftest import ldap_search_user
    ldap_user = ldap_search_user(ldap_connection, username)
    assert ldap_user is not None

📋 Доступные helper функции

В conftest.py есть готовые функции для работы с LDAP:

  • ldap_search_user(ldap_connection, username) - найти пользователя в LDAP
  • ldap_delete_user(ldap_connection, username) - удалить пользователя из LDAP
  • ldap_cleanup_test_users(ldap_connection, prefix="test_") - очистить всех тестовых пользователей
  • get_ldap_connection(ldap_connection) - получить прямое подключение к LDAP

Фикстуры

  • ldap_connection (session) - параметры подключения к LDAP
  • ldap_test_settings - временно переключает Django на тестовый LDAP
  • cleanup_test_data (autouse) - автоматически очищает тестовые данные после каждого теста

🔧 Управление LDAP сервером

# Запустить
./ldap-test.sh start

# Остановить (но не удалять данные)
./ldap-test.sh stop

# Перезапустить
./ldap-test.sh restart

# Посмотреть логи
./ldap-test.sh logs

# Проверить что LDAP работает
./ldap-test.sh check

# Полная очистка (удалит все данные)
./ldap-test.sh clean

🌐 Веб-интерфейс phpLDAPadmin

Для визуального просмотра данных в LDAP:

start http://localhost:8090

Вход:

  • Login DN: cn=admin,dc=test,dc=local
  • Password: test_admin_password

Здесь можно посмотреть структуру LDAP, созданных пользователей, группы и т.д.

📝 Структура тестов

tests/integration/
├── conftest.py              # Фикстуры и helper функции
├── test_ldap_simple.py      # Простые интеграционные тесты
└── README.md                # Эта инструкция

🎨 Пример теста

import pytest
from django.test import TestCase
from .conftest import ldap_search_user

class TestMyFeature(TestCase):
    
    @pytest.mark.django_db
    def test_user_creation(self, ldap_test_settings, ldap_connection):
        """Создание пользователя синхронизируется с LDAP"""
        # Arrange
        user_data = {
            "username": "test_newuser",
            "email": "newuser@test.local",
            "password": "Password123!",
            # ... другие поля
        }
        
        # Act
        response = self.client.post("/api/v1/employees/register/", user_data)
        
        # Assert - проверяем Django
        assert response.status_code == 201
        
        # Assert - проверяем LDAP
        ldap_user = ldap_search_user(ldap_connection, "test_newuser")
        assert ldap_user is not None
        
        dn, attrs = ldap_user
        assert b"newuser@test.local" in attrs.get("mail", [])

🐛 Отладка

Проверить что LDAP запущен

docker ps | grep ldap
# Должен показать: eusrr-test-ldap

Посмотреть логи LDAP

./ldap-test.sh logs

Проверить подключение к LDAP

./ldap-test.sh check

Очистить тестовые данные вручную

from tests.integration.conftest import ldap_cleanup_test_users

ldap_connection = {
    "uri": "ldap://localhost:10389",
    "base_dn": "dc=test,dc=local",
    "admin_dn": "cn=admin,dc=test,dc=local",
    "admin_password": "test_admin_password",
    "users_ou": "ou=Users,dc=test,dc=local",
}

ldap_cleanup_test_users(ldap_connection, prefix="test_")

✅ Преимущества этого подхода

  1. Простота - обычные pytest тесты, никаких сложных фикстур
  2. Скорость - LDAP запускается один раз, не перезапускается между тестами
  3. Удобство - веб-интерфейс для визуального контроля
  4. Изоляция - автоматическая очистка тестовых данных после каждого теста
  5. Реалистичность - тесты работают с настоящим LDAP

🔄 Workflow разработки

  1. Утром - запускаете LDAP сервер:

    ./ldap-test.sh start
    
  2. В течение дня - пишете и запускаете тесты:

    pytest tests/integration/ -v
    
  3. Вечером - останавливаете сервер (опционально):

    ./ldap-test.sh stop
    
  4. При необходимости - чистите данные:

    ./ldap-test.sh clean && ./ldap-test.sh start
    

📚 Следующие шаги

  • Дописать проверки для полей в LDAP (accountStatus, etc)
  • Добавить тесты для групп и департаментов
  • Добавить тесты для обновления пользователей
  • Протестировать синхронизацию при изменении данных