Skip to content
Snippets Groups Projects

Refactor Note REST API endpoint

Merged Konrad Mohrfeldt requested to merge kmohrf/aep05-note-endpoint-refactoring into aep05
7 files
+ 281
88
Compare changes
  • Side-by-side
  • Inline
Files
7
+ 100
0
import datetime
from django.contrib.auth.models import User
from django.utils.text import slugify
from django.utils.timezone import now
from program.models import Note, RRule, Schedule, Show, TimeSlot
class SteeringTestCaseMixin:
base_url = "/api/v1"
def _url(self, *paths, **kwargs):
url = "/".join(str(p) for p in paths) + "/"
return f"{self.base_url}/{url.format(**kwargs)}"
def _get_client(self, user=None):
client = self.client_class()
if user:
client.force_authenticate(user=user)
return client
class UserMixin:
user_admin: User
user_common: User
def setUp(self):
self.user_admin = User.objects.create_superuser(
"admin", "admin@aura.radio", password="admin"
)
self.user_common = User.objects.create_user(
"herbert", "herbert@aura.radio", password="herbert"
)
class ShowMixin:
def _create_show(self, name: str, **kwargs):
kwargs["name"] = name
kwargs.setdefault("slug", slugify(name))
kwargs.setdefault("short_description", f"The {name} show")
owners = kwargs.pop("owners", [])
show = Show.objects.create(**kwargs)
if owners:
show.owners.set(owners)
return show
class ScheduleMixin:
def _get_rrule(self):
rrule = RRule.objects.first()
if rrule is None:
rrule = RRule.objects.create(name="once", freq=0)
return rrule
def _create_schedule(self, show: Show, **kwargs):
_first_date = kwargs.get("first_date", now().date())
kwargs["show"] = show
kwargs.setdefault("first_date", _first_date)
kwargs.setdefault("start_time", "08:00")
kwargs.setdefault("last_date", _first_date + datetime.timedelta(days=365))
kwargs.setdefault("end_time", "09:00")
kwargs.setdefault("rrule", self._get_rrule())
return Schedule.objects.create(**kwargs)
class TimeSlotMixin:
def _create_timeslot(self, schedule: Schedule, **kwargs):
_start = kwargs.get("start", now())
kwargs.setdefault("schedule", schedule)
kwargs.setdefault("show", schedule.show)
kwargs.setdefault("start", _start)
kwargs.setdefault("end", _start + datetime.timedelta(hours=1))
return TimeSlot.objects.create(**kwargs)
class NoteMixin:
def _create_note(self, timeslot: TimeSlot, **kwargs):
note_count = Note.objects.all().count()
_title = kwargs.get("title", f"a random note #{note_count}")
kwargs["timeslot"] = timeslot
kwargs["title"] = _title
kwargs.setdefault("slug", slugify(_title))
return Note.objects.create(**kwargs)
def _create_random_note_content(self, **kwargs):
note_count = Note.objects.all().count()
_title = kwargs.get("title", f"a random note #{note_count}")
kwargs["title"] = _title
kwargs.setdefault("slug", slugify(_title))
kwargs.setdefault("content", "some random content")
kwargs.setdefault("contributors", [])
return kwargs
class ProgramModelMixin(ShowMixin, ScheduleMixin, TimeSlotMixin, NoteMixin):
pass
class BaseMixin(UserMixin, ProgramModelMixin, SteeringTestCaseMixin):
pass
Loading