127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
#!/usr/bin/env python
|
||
"""
|
||
Скрипт для массового добавления ensure_ldap_disabled fixture к тестам.
|
||
|
||
Добавляет параметр ensure_ldap_disabled к функциям тестов, которые:
|
||
- Создают объекты через Department.objects.create()
|
||
- Создают объекты через Position.objects.create()
|
||
- Не имеют уже ensure_ldap_disabled или ensure_ldap_enabled
|
||
"""
|
||
|
||
import re
|
||
from pathlib import Path
|
||
|
||
|
||
def fix_test_file(file_path: Path) -> tuple[bool, int]:
|
||
"""
|
||
Исправляет один тестовый файл.
|
||
|
||
Returns:
|
||
(changed, count) - был ли изменен файл и количество исправленных функций
|
||
"""
|
||
content = file_path.read_text(encoding="utf-8")
|
||
original_content = content
|
||
|
||
# Паттерн для поиска тестовых функций
|
||
# Ищем def test_...(...): где нет ensure_ldap в параметрах
|
||
|
||
fixed_count = 0
|
||
lines = content.split("\n")
|
||
new_lines = []
|
||
|
||
i = 0
|
||
while i < len(lines):
|
||
line = lines[i]
|
||
|
||
# Проверяем, является ли это определением тестовой функции
|
||
match = re.match(r"^def (test_\w+)\((.*)\):", line)
|
||
|
||
if match:
|
||
func_name = match.group(1)
|
||
params = match.group(2)
|
||
|
||
# Проверяем, нет ли уже ensure_ldap в параметрах
|
||
if "ensure_ldap" not in params:
|
||
# Проверяем следующие 50 строк на наличие Department.objects.create или Position.objects.create
|
||
check_lines = "\n".join(lines[i : min(i + 50, len(lines))])
|
||
|
||
if (
|
||
"Department.objects.create" in check_lines
|
||
or "Position.objects.create" in check_lines
|
||
or "DepartmentRole.objects.create" in check_lines
|
||
or "make_department" in check_lines
|
||
):
|
||
# Добавляем ensure_ldap_disabled
|
||
if params.strip():
|
||
new_params = f"{params}, ensure_ldap_disabled"
|
||
else:
|
||
new_params = "ensure_ldap_disabled"
|
||
|
||
new_line = line.replace(f"({params})", f"({new_params})")
|
||
new_lines.append(new_line)
|
||
fixed_count += 1
|
||
print(f" ✓ Исправлена функция: {func_name}")
|
||
else:
|
||
new_lines.append(line)
|
||
else:
|
||
new_lines.append(line)
|
||
else:
|
||
new_lines.append(line)
|
||
|
||
i += 1
|
||
|
||
new_content = "\n".join(new_lines)
|
||
|
||
if new_content != original_content:
|
||
file_path.write_text(new_content, encoding="utf-8")
|
||
return True, fixed_count
|
||
|
||
return False, 0
|
||
|
||
|
||
def main():
|
||
"""Главная функция."""
|
||
test_dir = Path(__file__).parent.parent / "tests" / "api" / "v1" / "employees"
|
||
|
||
# Список файлов для исправления
|
||
files_to_fix = [
|
||
"test_department_membership_separation.py",
|
||
"test_department_roles.py",
|
||
"test_department_roles_extra.py",
|
||
"test_departments.py",
|
||
"test_employee_actions.py",
|
||
"test_employees.py",
|
||
"test_positions.py",
|
||
"test_role_assignment.py",
|
||
"test_skills.py",
|
||
]
|
||
|
||
total_fixed = 0
|
||
total_files = 0
|
||
|
||
for filename in files_to_fix:
|
||
file_path = test_dir / filename
|
||
|
||
if not file_path.exists():
|
||
print(f"⚠ Файл не найден: {filename}")
|
||
continue
|
||
|
||
print(f"\nОбрабатываем {filename}...")
|
||
changed, count = fix_test_file(file_path)
|
||
|
||
if changed:
|
||
print(f" ✅ {filename} исправлен ({count} функций)")
|
||
total_fixed += count
|
||
total_files += 1
|
||
else:
|
||
print(f" ⊘ {filename} не требует изменений")
|
||
|
||
print(f"\n{'=' * 60}")
|
||
print(f"✅ Обработано файлов: {total_files}")
|
||
print(f"✅ Исправлено функций: {total_fixed}")
|
||
print(f"{'=' * 60}\n")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|