Corp/backend/tests/calendar_app/test_models.py

58 lines
2.0 KiB
Python

import pytest
from django.contrib.auth import get_user_model
from django.db import IntegrityError, transaction
from django.contrib.auth.models import Permission
from employees.models import Department
from calendar_app.models import CompanyEvent, DepartmentEvent, Recurrence
User = get_user_model()
@pytest.mark.django_db
def test_department_event_clean_invalid_range():
dep = Department.objects.create(name="QA")
ev = DepartmentEvent(
department=dep,
title="Спринт",
start_date="2025-05-10",
end_date="2025-05-01", # раньше начала
)
with pytest.raises(Exception):
ev.full_clean()
@pytest.mark.django_db
def test_department_event_db_constraint_invalid_range():
dep = Department.objects.create(name="DevOps")
# обходим full_clean и проверяем именно DB-constraint
with pytest.raises(IntegrityError):
with transaction.atomic():
DepartmentEvent.objects.create(
department=dep, title="Bad", start_date="2025-05-10", end_date="2025-05-01"
)
@pytest.mark.django_db
def test_created_by_set_null_on_user_delete():
dep = Department.objects.create(name="HR")
user = User.objects.create_user(phone_number="+70000000001", email="u@x.io", password="x")
ev = DepartmentEvent.objects.create(department=dep, title="1:1", start_date="2025-06-01", created_by=user)
user.delete()
ev.refresh_from_db()
assert ev.created_by is None
@pytest.mark.django_db
def test_company_event_str_and_recurrence():
user = User.objects.create_user(phone_number="+70000000002", email="c@x.io", password="x")
ev = CompanyEvent.objects.create(
title="ДР компании", date="2025-01-15", recurrence=Recurrence.ANNUAL, created_by=user
)
assert "ДР компании" in str(ev)
assert ev.recurrence == Recurrence.ANNUAL
@pytest.mark.django_db
def test_permission_exists():
assert Permission.objects.filter(codename="manage_department_events").exists()