forked from rc/aircox
feat: add error message page; improve admin ui; add missing test files
This commit is contained in:
110
aircox/tests/models/test_signals.py
Normal file
110
aircox/tests/models/test_signals.py
Normal file
@ -0,0 +1,110 @@
|
||||
from datetime import timedelta
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.utils import timezone as tz
|
||||
|
||||
import pytest
|
||||
from model_bakery import baker
|
||||
|
||||
from aircox.conf import settings
|
||||
from aircox.models import signals, Diffusion, Episode
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sched(program, sched_initials):
|
||||
return next(r for r in sched_initials if r.program == program)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def eps_diffs(program, sched):
|
||||
eps = baker.make(Episode, program=program, _quantity=3)
|
||||
diffs = []
|
||||
for ep in eps:
|
||||
diffs += baker.make(
|
||||
Diffusion,
|
||||
start=tz.now() + timedelta(days=10),
|
||||
end=tz.now() + timedelta(days=10, hours=1),
|
||||
schedule=sched,
|
||||
episode=ep,
|
||||
_quantity=3,
|
||||
)
|
||||
return eps, diffs
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_user_default_groups():
|
||||
user = User(username="test")
|
||||
user.save()
|
||||
|
||||
default_groups = settings.DEFAULT_USER_GROUPS
|
||||
groups = Group.objects.filter(name__in=default_groups.keys())
|
||||
assert groups.exists()
|
||||
assert all(
|
||||
set(group.permissions.all().values_list("codename", flat=True))
|
||||
== set(default_groups[group.name])
|
||||
for group in groups
|
||||
)
|
||||
user_groups = set(user.groups.all().values_list("name", flat=True))
|
||||
assert set(default_groups.keys()) == user_groups
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_user_default_groups_skip_on_superuser():
|
||||
user = User(username="test", is_superuser=True)
|
||||
user.save()
|
||||
assert list(user.groups.all()) == []
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_page_post_save(program, episodes):
|
||||
episodes = [r for r in episodes if r.program == program]
|
||||
for episode in episodes:
|
||||
episode.cover = None
|
||||
Episode.objects.bulk_update(episodes, ["cover"])
|
||||
# TODO: cover must be an fk to Image
|
||||
# program.cover = "dummy/cover.png"
|
||||
# program.save()
|
||||
|
||||
# query = Episode.objects.filter(program=program) \
|
||||
# .values_list("cover", flat=True)
|
||||
# assert all(r == program.cover for r in query)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_program_post_save(program, eps_diffs):
|
||||
eps, diffs = eps_diffs
|
||||
program.active = False
|
||||
program.save()
|
||||
|
||||
eps_ids = [r.id for r in eps]
|
||||
diff_ids = [r.id for r in diffs]
|
||||
assert not Episode.objects.filter(id__in=eps_ids).exists()
|
||||
assert not Diffusion.objects.filter(id__in=diff_ids).exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_schedule_pre_save(sched_initials):
|
||||
sched = sched_initials[0]
|
||||
signals.schedule_pre_save(None, sched)
|
||||
assert getattr(sched, "_initial")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_schedule_post_save():
|
||||
pass
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_schedule_pre_delete(sched, eps_diffs):
|
||||
eps, diffs = eps_diffs
|
||||
signals.schedule_pre_delete(None, sched)
|
||||
assert not Episode.objects.filter(id__in=(r.id for r in eps)).exists()
|
||||
assert not Diffusion.objects.filter(id__in=(r.id for r in diffs)).exists()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_diffusion_post_delete(eps_diffs):
|
||||
eps = eps_diffs[0][0]
|
||||
Diffusion.objects.filter(
|
||||
id__in=[r.id for r in eps.diffusion_set.all()]
|
||||
).delete()
|
||||
assert Episode.objects.filter(id=eps.id).first() is None
|
Reference in New Issue
Block a user