Skip to content
Snippets Groups Projects

Expand block info in JSON export

2 files
+ 150
64
Compare changes
  • Side-by-side
  • Inline

Files

+ 125
62
@@ -248,7 +248,7 @@ class JSONExportTest(TestCase):
@@ -248,7 +248,7 @@ class JSONExportTest(TestCase):
)
)
self.assertEqual(
self.assertEqual(
self.export_dict["timeslots"]["info"].keys(),
self.export_dict["timeslots"]["info"].keys(),
{"duration"},
{"duration", "blocknames"},
"timeslot info keys not as expected",
"timeslot info keys not as expected",
)
)
self._check_type(
self._check_type(
@@ -257,6 +257,21 @@ class JSONExportTest(TestCase):
@@ -257,6 +257,21 @@ class JSONExportTest(TestCase):
"info/duration",
"info/duration",
item=item,
item=item,
)
)
 
self._check_lst(
 
self.export_dict["timeslots"]["info"]["blocknames"],
 
"info/blocknames",
 
item=item,
 
contained_type=list,
 
)
 
for blockname in self.export_dict["timeslots"]["info"]["blocknames"]:
 
self.assertEqual(len(blockname), 2)
 
self._check_lst(
 
blockname,
 
"info/blocknames/entry",
 
item=item,
 
contained_type=str,
 
)
 
self._check_lst(
self._check_lst(
self.export_dict["timeslots"]["blocks"],
self.export_dict["timeslots"]["blocks"],
"blocks",
"blocks",
@@ -710,9 +725,11 @@ class JSONExportTest(TestCase):
@@ -710,9 +725,11 @@ class JSONExportTest(TestCase):
self.set_up_event(event=event)
self.set_up_event(event=event)
cat_avails = self._get_cat_availability()
cat_avails = self._get_cat_availability()
for timeslot in chain.from_iterable(
num_blocks = len(self.export_dict["timeslots"]["blocks"])
 
for block_idx, block in enumerate(
self.export_dict["timeslots"]["blocks"]
self.export_dict["timeslots"]["blocks"]
):
):
 
for timeslot in block:
start, end = self._get_timeslot_start_end(timeslot)
start, end = self._get_timeslot_start_end(timeslot)
timeslot_avail = Availability(
timeslot_avail = Availability(
event=self.event, start=start, end=end
event=self.event, start=start, end=end
@@ -766,7 +783,8 @@ class JSONExportTest(TestCase):
@@ -766,7 +783,8 @@ class JSONExportTest(TestCase):
f"availability-ak-{ak.id}"
f"availability-ak-{ak.id}"
for ak in AK.objects.filter(event=event)
for ak in AK.objects.filter(event=event)
if self._is_restricted_and_contained_slot(
if self._is_restricted_and_contained_slot(
timeslot_avail, Availability.union(ak.availabilities.all())
timeslot_avail,
 
Availability.union(ak.availabilities.all()),
)
)
}
}
fulfilled_time_constraints |= {
fulfilled_time_constraints |= {
@@ -775,7 +793,52 @@ class JSONExportTest(TestCase):
@@ -775,7 +793,52 @@ class JSONExportTest(TestCase):
if self._is_ak_fixed_in_slot(slot, timeslot_avail)
if self._is_ak_fixed_in_slot(slot, timeslot_avail)
}
}
 
fulfilled_time_constraints |= {
 
f"notblock{idx}"
 
for idx in range(num_blocks)
 
if idx != block_idx
 
}
 
self.assertEqual(
self.assertEqual(
fulfilled_time_constraints,
fulfilled_time_constraints,
set(timeslot["fulfilled_time_constraints"]),
set(timeslot["fulfilled_time_constraints"]),
)
)
 
 
def test_timeslots_info(self):
 
"""Test timeslots info dict"""
 
for event in Event.objects.all():
 
with self.subTest(event=event):
 
self.set_up_event(event=event)
 
 
self.assertAlmostEqual(
 
self.export_dict["timeslots"]["info"]["duration"],
 
float(self.event.export_slot),
 
)
 
 
block_names = []
 
for block in self.export_dict["timeslots"]["blocks"]:
 
if not block:
 
continue
 
 
block_start, _ = self._get_timeslot_start_end(block[0])
 
_, block_end = self._get_timeslot_start_end(block[-1])
 
 
start_day = block_start.strftime("%A, %d. %b")
 
if block_start.date() == block_end.date():
 
# same day
 
time_str = (
 
block_start.strftime("%H:%M")
 
+ ""
 
+ block_end.strftime("%H:%M")
 
)
 
else:
 
# different days
 
time_str = (
 
block_start.strftime("%a %H:%M")
 
+ ""
 
+ block_end.strftime("%a %H:%M")
 
)
 
block_names.append([start_day, time_str])
 
self.assertEqual(
 
block_names, self.export_dict["timeslots"]["info"]["blocknames"]
 
)
Loading