diff --git a/api/tests/playlists/test_models.py b/api/tests/playlists/test_models.py
index b90f525184b2f4863d8d9f7ab07314ac1e1a1712..d62a7417be2e0b64c1c24862daf9d4d7f41f4b6a 100644
--- a/api/tests/playlists/test_models.py
+++ b/api/tests/playlists/test_models.py
@@ -123,6 +123,87 @@ def test_insert_many_honor_max_tracks(preferences, factories):
     with pytest.raises(exceptions.ValidationError):
         playlist.insert_many([track, track, track])
 
+def test_cannot_insert_duplicate(factories):
+    playlist = factories["playlists.Playlist"]()
+    factories["music.Track"](title="Unique Track", id=14)
+    track = factories["music.Track"](title="Existing Track", id=15)
+
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=0, track=track)
+
+    with pytest.raises(exceptions.ValidationError) as e:
+        new = factories["playlists.PlaylistTrack"](playlist=playlist, index=1, track=track)
+        playlist.insert(new)
+
+    assert e.value.detail["error"] == "tracks_already_exist_in_playlist"
+    assert e.value.detail["tracks"] == [track.title]
+
+
+def test_can_insert_track_to_playlist_with_existing_duplicates(factories):
+    playlist = factories["playlists.Playlist"]()
+    existing_duplicate = factories["music.Track"](id=15)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=0, track=existing_duplicate)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=1, track=existing_duplicate)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=2, track=existing_duplicate)
+
+    new_track = factories["music.Track"](id=51)
+    new_plt = factories["playlists.PlaylistTrack"](playlist=playlist, index=3, track=new_track)
+
+    # no error
+    playlist.insert(new_plt, allow_duplicate=False)
+
+def test_can_insert_duplicate_with_override(factories):
+    playlist = factories["playlists.Playlist"]()
+    factories["music.Track"](title="Unique Track", id=14)
+    track = factories["music.Track"](title="Existing Track", id=15)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=0, track=track)
+
+    new = factories["playlists.PlaylistTrack"](playlist=playlist, index=1, track=track)
+    playlist.insert(new, allow_duplicate=True)
+
+    new.refresh_from_db()
+    assert new.index == 1
+
+def test_cannot_insert_many_duplicates(factories):
+    playlist = factories["playlists.Playlist"]()
+
+    t1 = factories["music.Track"](title="Existing Track 1", id=1)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=0, track=t1)
+
+    t2 = factories["music.Track"](title="Existing Track 2", id=2)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=1, track=t2)
+
+    factories["music.Track"](title="Existing Track 3", id=3)
+
+    t4 = factories["music.Track"](title="New Track 4", id=4)
+
+    with pytest.raises(exceptions.ValidationError) as e:
+        tracks = [t1, t4, t2]
+        playlist.insert_many(tracks)
+
+    assert e.value.detail["error"] == "tracks_already_exist_in_playlist"
+    assert e.value.detail["tracks"] == [t1.title, t2.title]
+
+def test_can_insert_many_duplicates_with_override(factories):
+    playlist = factories["playlists.Playlist"]()
+
+    t1 = factories["music.Track"](title="Existing Track 1", id=1)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=0, track=t1)
+
+    t2 = factories["music.Track"](title="Existing Track 2", id=2)
+    factories["playlists.PlaylistTrack"](playlist=playlist, index=1, track=t2)
+
+    factories["music.Track"](title="Existing Track 3", id=3)
+
+    t4 = factories["music.Track"](title="New Track 4", id=4)
+
+    tracks = [t1, t4, t2]
+
+    plts = playlist.insert_many(tracks, allow_duplicates=True)
+
+    assert len(plts) == 3
+    assert plts[0].track == t1
+    assert plts[1].track == t4
+    assert plts[2].track == t2
 
 @pytest.mark.parametrize(
     "privacy_level,expected", [("me", False), ("instance", False), ("everyone", True)]