Corp/backend/scripts/utils/create_test_data.py
2026-09-07 19:43:48 +03:00

177 lines
5.6 KiB
Python

#!/usr/bin/env python
"""
Создание тестовых пользователей и отделов
"""
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eusrr_backend.settings")
django.setup()
from django.contrib.auth import get_user_model
from employees.models import Department, DepartmentRole, EmployeeDepartment
User = get_user_model()
def create_test_users():
"""Создание тестовых пользователей"""
print("\n" + "=" * 60)
print(" Создание тестовых пользователей")
print("=" * 60)
users_data = [
{
"username": "recipient1",
"email": "recipient1@test.local",
"first_name": "Получатель",
"last_name": "Первый",
"password": "test123",
},
{
"username": "recipient2",
"email": "recipient2@test.local",
"first_name": "Получатель",
"last_name": "Второй",
"password": "test123",
},
{
"username": "recipient3",
"email": "recipient3@test.local",
"first_name": "Получатель",
"last_name": "Третий",
"password": "test123",
},
{
"username": "cc_user1",
"email": "cc_user1@test.local",
"first_name": "Копия",
"last_name": "Первый",
"password": "test123",
},
{
"username": "cc_user2",
"email": "cc_user2@test.local",
"first_name": "Копия",
"last_name": "Второй",
"password": "test123",
},
]
created_users = []
for user_data in users_data:
username = user_data["username"]
# Проверяем, существует ли
if User.objects.filter(username=username).exists():
user = User.objects.get(username=username)
print(f" ⚠ Пользователь {username} уже существует")
else:
user = User.objects.create_user(**user_data)
user.is_active = True
user.save()
print(f" ✓ Создан {username} - {user.get_full_name()}")
created_users.append(user)
return created_users
def create_test_departments():
"""Создание тестовых отделов"""
print("\n" + "=" * 60)
print(" Создание тестовых отделов")
print("=" * 60)
departments_data = [
{"name": "Отдел тестирования 1", "code": "TEST_DEPT_1"},
{"name": "Отдел тестирования 2", "code": "TEST_DEPT_2"},
]
created_depts = []
for dept_data in departments_data:
code = dept_data["code"]
if Department.objects.filter(code=code).exists():
dept = Department.objects.get(code=code)
print(f" ⚠ Отдел {code} уже существует")
else:
dept = Department.objects.create(**dept_data)
print(f" ✓ Создан отдел {dept.name}")
created_depts.append(dept)
return created_depts
def link_users_to_departments(users, departments):
"""Привязка пользователей к отделам"""
print("\n" + "=" * 60)
print(" Привязка пользователей к отделам")
print("=" * 60)
if not departments:
print(" ⚠ Нет отделов для привязки")
return
# Получаем или создаем роль
role, created = DepartmentRole.objects.get_or_create(
name="Сотрудник", defaults={"description": "Обычный сотрудник отдела"}
)
if created:
print(f" ✓ Создана роль: {role.name}")
# Привязываем пользователей
for i, user in enumerate(users):
dept = departments[i % len(departments)]
link, created = EmployeeDepartment.objects.get_or_create(
employee=user, department=dept, defaults={"role": role, "is_active": True}
)
if created:
print(f" ✓ {user.username} → {dept.name}")
else:
print(f" ⚠ {user.username} уже в {dept.name}")
def show_summary():
"""Показать итоги"""
print("\n" + "=" * 60)
print(" ИТОГИ")
print("=" * 60)
total_users = User.objects.filter(is_active=True).count()
total_depts = Department.objects.count()
total_links = EmployeeDepartment.objects.filter(is_active=True).count()
print(f"\nАктивных пользователей: {total_users}")
print(f"Отделов: {total_depts}")
print(f"Связей пользователь-отдел: {total_links}")
print("\nПользователи для тестирования:")
test_users = User.objects.filter(
username__in=["recipient1", "recipient2", "recipient3", "cc_user1", "cc_user2"]
)
for user in test_users:
depts = user.departments_links.filter(is_active=True)
dept_names = ", ".join([d.department.name for d in depts])
print(f" - {user.username}: {user.get_full_name()} ({dept_names})")
if __name__ == "__main__":
print("\n" + "=" * 60)
print(" 🔧 ПОДГОТОВКА ТЕСТОВЫХ ДАННЫХ")
print("=" * 60)
users = create_test_users()
departments = create_test_departments()
link_users_to_departments(users, departments)
show_summary()
print("\n✓ Готово! Теперь можно запускать тесты API.\n")