Update upcoming shift endpoint to return a list (#1784)
This commit is contained in:
parent
4149c266bb
commit
6cff9729d8
3 changed files with 42 additions and 31 deletions
|
|
@ -1716,19 +1716,20 @@ def test_upcoming_shifts_oncall(
|
|||
response = client.get(url, format="json", **make_user_auth_headers(admin, token))
|
||||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
returned_data = response.data
|
||||
assert returned_data[schedule.public_primary_key]["schedule"] == schedule.name
|
||||
assert returned_data[schedule.public_primary_key]["is_oncall"]
|
||||
assert returned_data[schedule.public_primary_key]["current_shift"]["start"] == on_call_shift.start
|
||||
returned_data = response.data[0]
|
||||
assert returned_data["schedule_id"] == schedule.public_primary_key
|
||||
assert returned_data["schedule_name"] == schedule.name
|
||||
assert returned_data["is_oncall"]
|
||||
assert returned_data["current_shift"]["start"] == on_call_shift.start
|
||||
next_shift_start = on_call_shift.start + timezone.timedelta(days=1)
|
||||
assert returned_data[schedule.public_primary_key]["next_shift"]["start"] == next_shift_start
|
||||
assert returned_data["next_shift"]["start"] == next_shift_start
|
||||
|
||||
# empty response for other user
|
||||
url = reverse("api-internal:user-upcoming-shifts", kwargs={"pk": other_user.public_primary_key})
|
||||
response = client.get(url, format="json", **make_user_auth_headers(admin, token))
|
||||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
assert response.data == {}
|
||||
assert response.data == []
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
|
@ -1768,11 +1769,12 @@ def test_upcoming_shifts_override(
|
|||
response = client.get(url, format="json", **make_user_auth_headers(admin, token))
|
||||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
returned_data = response.data
|
||||
assert returned_data[schedule.public_primary_key]["schedule"] == schedule.name
|
||||
assert returned_data[schedule.public_primary_key]["is_oncall"] is False
|
||||
assert returned_data[schedule.public_primary_key]["current_shift"] is None
|
||||
assert returned_data[schedule.public_primary_key]["next_shift"]["start"] == override.start
|
||||
returned_data = response.data[0]
|
||||
assert returned_data["schedule_id"] == schedule.public_primary_key
|
||||
assert returned_data["schedule_name"] == schedule.name
|
||||
assert returned_data["is_oncall"] is False
|
||||
assert returned_data["current_shift"] is None
|
||||
assert returned_data["next_shift"]["start"] == override.start
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
|
@ -1789,7 +1791,8 @@ def test_upcoming_shifts_multiple_schedules(
|
|||
_, token = make_token_for_organization(organization)
|
||||
|
||||
schedules = []
|
||||
for i in range(3):
|
||||
# create schedules in a reversed order to check the output is sorted later
|
||||
for i in range(2, -1, -1):
|
||||
schedule = make_schedule(
|
||||
organization,
|
||||
schedule_class=OnCallScheduleWeb,
|
||||
|
|
@ -1822,16 +1825,14 @@ def test_upcoming_shifts_multiple_schedules(
|
|||
|
||||
assert response.status_code == status.HTTP_200_OK
|
||||
returned_data = response.data
|
||||
for i, schedule in enumerate(schedules):
|
||||
assert returned_data[schedule.public_primary_key]["schedule"] == schedule.name
|
||||
for i, schedule in enumerate(reversed(schedules)):
|
||||
assert returned_data[i]["schedule_name"] == schedule.name
|
||||
expected_start = today + timezone.timedelta(hours=start_h) + timezone.timedelta(days=i)
|
||||
if i == 0:
|
||||
assert returned_data[schedule.public_primary_key]["is_oncall"]
|
||||
assert returned_data[schedule.public_primary_key]["current_shift"]["start"] == expected_start
|
||||
assert returned_data[schedule.public_primary_key]["next_shift"][
|
||||
"start"
|
||||
] == expected_start + timezone.timedelta(days=1)
|
||||
assert returned_data[i]["is_oncall"]
|
||||
assert returned_data[i]["current_shift"]["start"] == expected_start
|
||||
assert returned_data[i]["next_shift"]["start"] == expected_start + timezone.timedelta(days=1)
|
||||
else:
|
||||
assert returned_data[schedule.public_primary_key]["is_oncall"] is False
|
||||
assert returned_data[schedule.public_primary_key]["current_shift"] is None
|
||||
assert returned_data[schedule.public_primary_key]["next_shift"]["start"] == expected_start
|
||||
assert returned_data[i]["is_oncall"] is False
|
||||
assert returned_data[i]["current_shift"] is None
|
||||
assert returned_data[i]["next_shift"]["start"] == expected_start
|
||||
|
|
|
|||
|
|
@ -475,16 +475,26 @@ class UserView(
|
|||
schedules = OnCallSchedule.objects.related_to_user(user)
|
||||
|
||||
# check upcoming shifts
|
||||
upcoming = {}
|
||||
upcoming = []
|
||||
for schedule in schedules:
|
||||
current_shift, upcoming_shift = schedule.upcoming_shift_for_user(user, days=days)
|
||||
if current_shift or upcoming_shift:
|
||||
upcoming[schedule.public_primary_key] = {
|
||||
"schedule": schedule.name,
|
||||
"is_oncall": current_shift is not None,
|
||||
"current_shift": current_shift,
|
||||
"next_shift": upcoming_shift,
|
||||
}
|
||||
upcoming.append(
|
||||
{
|
||||
"schedule_id": schedule.public_primary_key,
|
||||
"schedule_name": schedule.name,
|
||||
"is_oncall": current_shift is not None,
|
||||
"current_shift": current_shift,
|
||||
"next_shift": upcoming_shift,
|
||||
}
|
||||
)
|
||||
|
||||
# sort entries by start timestamp
|
||||
def sorting_key(entry):
|
||||
shift = entry["current_shift"] if entry["current_shift"] else entry["next_shift"]
|
||||
return shift["start"]
|
||||
|
||||
upcoming.sort(key=sorting_key)
|
||||
|
||||
return Response(upcoming, status=status.HTTP_200_OK)
|
||||
|
||||
|
|
|
|||
|
|
@ -1203,7 +1203,7 @@ def test_user_related_schedules(
|
|||
make_schedule(organization, schedule_class=OnCallScheduleWeb)
|
||||
|
||||
schedules = OnCallSchedule.objects.related_to_user(admin)
|
||||
assert list(schedules) == [schedule1, schedule2]
|
||||
assert set(schedules) == {schedule1, schedule2}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
|
@ -1268,7 +1268,7 @@ def test_user_related_schedules_only_username(
|
|||
schedule3.refresh_ical_file()
|
||||
|
||||
schedules = OnCallSchedule.objects.related_to_user(user)
|
||||
assert list(schedules) == [schedule1, schedule2]
|
||||
assert set(schedules) == {schedule1, schedule2}
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue