import pytest from sqlalchemy.exc import IntegrityError from backend.app.models import Artist, Source pytestmark = pytest.mark.integration @pytest.mark.asyncio async def test_duplicate_artist_platform_url_rejected(db): artist = Artist(name="Alice", slug="alice") db.add(artist) await db.flush() db.add(Source( artist_id=artist.id, platform="patreon", url="https://patreon.com/alice", enabled=True, )) await db.flush() db.add(Source( artist_id=artist.id, platform="patreon", url="https://patreon.com/alice", enabled=True, )) with pytest.raises(IntegrityError): await db.flush() @pytest.mark.asyncio async def test_same_url_under_different_artist_ok(db): a = Artist(name="A", slug="a") b = Artist(name="B", slug="b") db.add_all([a, b]) await db.flush() db.add(Source(artist_id=a.id, platform="patreon", url="https://x/y", enabled=True)) db.add(Source(artist_id=b.id, platform="patreon", url="https://x/y", enabled=True)) await db.flush() # must NOT raise