diff --git a/program/tests/test_services.py b/program/tests/test_services.py
index 73ba273687d14171495893a929d651adc70603db..bcb122eefb585c2bb30aca7b704014f0b8e9c2c3 100644
--- a/program/tests/test_services.py
+++ b/program/tests/test_services.py
@@ -1,11 +1,14 @@
-from datetime import datetime
+from datetime import datetime, timedelta
 
 import pytest
 
 from django.utils.timezone import make_aware
 from program.models import TimeSlot
-from program.services import generate_conflicts, generate_timeslots
+from program.services import generate_conflicts, generate_timeslots, make_conflicts
 from program.tests.factories import TimeslotFactory
+from program.tests.test_schedules import schedule_data
+from program.tests.test_schedules import url as schedule_url
+from program.typing import ScheduleData
 
 pytestmark = pytest.mark.django_db
 
@@ -125,3 +128,63 @@ def test_generate_timeslots_monthly(monthly_schedule):
     timeslots = generate_timeslots(monthly_schedule)
 
     assert len(timeslots) == 1 or 2  # I’m not sure why, but this changes on February
+
+
+def test_make_conflicts_once_schedule_no_collisions(show, once_schedule):
+    data = ScheduleData(
+        first_date=once_schedule.first_date.strftime("%Y-%m-%d"),
+        end_time=once_schedule.end_time.strftime("%H:%M:%S"),
+        rrule_id=once_schedule.rrule_id,
+        show_id=show.id,
+        start_time=once_schedule.start_time.strftime("%H:%M:%S"),
+    )
+
+    conflicts = make_conflicts(data, None, once_schedule.show_id)
+    projected = conflicts["projected"][0]
+
+    assert projected["collisions"] == []
+    assert projected["error"] is None
+    assert projected["solution_choices"] == set()
+
+
+def test_make_conflicts_weekly_schedule_collisions(admin_api_client, show, weekly_schedule):
+    admin_api_client.post(schedule_url(), data=schedule_data(weekly_schedule, show), format="json")
+
+    data = ScheduleData(
+        first_date=weekly_schedule.first_date.strftime("%Y-%m-%d"),
+        end_time=weekly_schedule.end_time.strftime("%H:%M:%S"),
+        rrule_id=weekly_schedule.rrule_id,
+        show_id=show.id,
+        start_time=weekly_schedule.start_time.strftime("%H:%M:%S"),
+    )
+
+    conflicts = make_conflicts(data, None, weekly_schedule.show_id)
+
+    for projected in conflicts["projected"]:
+        assert len(projected["collisions"]) == 1
+        assert projected["error"] is None
+        assert projected["solution_choices"] == {"ours", "theirs"}
+
+
+def test_make_conflicts_extend_weekly_schedule_collisions(admin_api_client, show, weekly_schedule):
+    response = admin_api_client.post(
+        schedule_url(), data=schedule_data(weekly_schedule, show), format="json"
+    )
+    schedule_id = response.json().get("id")
+
+    in_one_year = datetime.now() + timedelta(days=365)
+    data = ScheduleData(
+        first_date=weekly_schedule.first_date.strftime("%Y-%m-%d"),
+        end_time=weekly_schedule.end_time.strftime("%H:%M:%S"),
+        last_date=in_one_year.strftime("%Y-%m-%d"),
+        rrule_id=weekly_schedule.rrule_id,
+        show_id=show.id,
+        start_time=weekly_schedule.start_time.strftime("%H:%M:%S"),
+    )
+
+    conflicts = make_conflicts(data, schedule_id, weekly_schedule.show_id)
+
+    for projected in conflicts["projected"]:
+        assert len(projected["collisions"]) == 1
+        assert projected["error"] is None
+        assert projected["solution_choices"] == {"ours", "theirs"}