- Создана структура docs/ с категориями: completed, guides, architecture, diagnostic, in-progress, reports - Перемещено 47+ MD файлов из корня проекта в docs/ - Удалено 6 устаревших/дублирующихся файлов - Создана структура backend/scripts/ для тестов и утилит - Перемещено 35 Python скриптов в backend/scripts/ - Создана структура backend/docs/ для технической документации - Перемещено 12 MD файлов backend в backend/docs/ - Перемещены LDAP тестовые данные в backend/tests/fixtures/ - Добавлены README файлы для навигации - Добавлены правила в .github/copilot-instructions.md для размещения документации Результат: - Корень проекта: только README.md - Корень backend/: только manage.py и Django приложения - Вся документация организована в структурированные папки
177 lines
5.7 KiB
Python
177 lines
5.7 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, EmployeeDepartment, DepartmentRole
|
|
|
|
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")
|