Skip to content
Snippets Groups Projects

Add tests on json export

1 file
+ 54
15
Compare changes
  • Side-by-side
  • Inline
+ 54
15
@@ -2,7 +2,7 @@ import json
import math
import traceback
from collections import defaultdict
from datetime import datetime
from datetime import datetime, timedelta
from itertools import chain
from typing import List
from zoneinfo import ZoneInfo
@@ -752,6 +752,21 @@ class JSONExportTest(TestCase):
)
return start, end
def _get_cat_availability_in_export(self):
export_slot_cat_avails = defaultdict(list)
for timeslot in chain.from_iterable(self.export_dict["timeslots"]["blocks"]):
for constr in timeslot["fulfilled_time_constraints"]:
if constr.startswith("availability-cat-"):
cat_name = constr[len("availability-cat-") :]
start, end = self._get_timeslot_start_end(timeslot)
export_slot_cat_avails[cat_name].append(
Availability(event=self.event, start=start, end=end)
)
return {
cat_name: Availability.union(avail_lst)
for cat_name, avail_lst in export_slot_cat_avails.items()
}
def test_timeslots_consecutive(self):
prev_end = None
for timeslot in chain.from_iterable(self.export_dict["timeslots"]["blocks"]):
@@ -783,25 +798,12 @@ class JSONExportTest(TestCase):
for cat in def_slot.primary_categories.all():
default_slots_avails[cat.name].append(avail)
export_slot_cat_avails = defaultdict(list)
for timeslot in chain.from_iterable(self.export_dict["timeslots"]["blocks"]):
for constr in timeslot["fulfilled_time_constraints"]:
if constr.startswith("availability-cat-"):
cat_name = constr[len("availability-cat-") :]
start, end = self._get_timeslot_start_end(timeslot)
export_slot_cat_avails[cat_name].append(
Availability(event=self.event, start=start, end=end)
)
cat_avails = {
cat_name: Availability.union(avail_lst)
for cat_name, avail_lst in default_slots_avails.items()
}
export_cat_avails = {
cat_name: Availability.union(avail_lst)
for cat_name, avail_lst in export_slot_cat_avails.items()
}
export_cat_avails = self._get_cat_availability_in_export()
for cat_name, cat_avails in cat_avails.items():
for avail in cat_avails:
@@ -812,3 +814,40 @@ class JSONExportTest(TestCase):
for export_avail in export_cat_avails[cat_name]
)
)
def test_block_cover_event(self):
if DefaultSlot.objects.filter(event=self.event).exists():
# nothing to test
return
start = self.event.start.astimezone(self.event.timezone)
end = self.event.end.astimezone(self.event.timezone)
delta = (end - start).total_seconds()
slot_seconds = 3600 / self.slots_in_an_hour
remainder_seconds = delta % slot_seconds
remainder_seconds += 1 # add a second to compensate rounding errs
seconds = timedelta(seconds=remainder_seconds)
end -= seconds
# set seconds and microseconds to 0 as they are not exported to the json
end -= timedelta(seconds=end.second, microseconds=end.microsecond)
event_avail = Availability(event=self.event, start=start, end=end)
cat_names = (
AKCategory.objects.filter(event=self.event)
.values_list("name", flat=True)
.all()
)
export_cat_avails = self._get_cat_availability_in_export()
for cat_name in cat_names:
# check that all default slot availabilities are covered
self.assertTrue(
any(
avail.contains(event_avail) for avail in export_cat_avails[cat_name]
),
f"AKCategory {cat_name}: Event ({event_avail.start}{event_avail.end}) "
f"not covered by {[f'{avail.start} {avail.end}' for avail in export_cat_avails[cat_name]]}",
)
Loading