Spaces:
Running
Running
File size: 2,140 Bytes
4ae09a8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | from unittest.mock import MagicMock, patch
from db import SongRepo, slugify
def test_slugify_basic():
assert slugify("Never Gonna Give You Up", "Rick Astley") == "never-gonna-give-you-up-rick-astley"
def test_slugify_truncates_long_input():
s = slugify("a" * 200, "b" * 50)
assert len(s) <= 80
def test_slugify_strips_punctuation():
assert slugify("Hello, World!", "DJ?") == "hello-world-dj"
def _repo_with_mock_client():
client = MagicMock()
return SongRepo(client), client
def test_get_song_returns_row_or_none():
repo, client = _repo_with_mock_client()
client.table.return_value.select.return_value.eq.return_value.maybe_single.return_value.execute.return_value = MagicMock(data={"youtube_id": "abc"})
row = repo.get_song("abc")
assert row == {"youtube_id": "abc"}
def test_upsert_song_calls_supabase_upsert():
repo, client = _repo_with_mock_client()
client.table.return_value.upsert.return_value.execute.return_value = MagicMock(data=[{"youtube_id": "abc"}])
repo.upsert_song({
"youtube_id": "abc", "slug": "x", "title": "T", "artist": "A",
"duration_sec": 100, "r2_key": "karaoke/abc.mp3",
"thumbnail_url": "https://i.ytimg.com/vi/abc/hqdefault.jpg",
"status": "ready",
})
client.table.assert_called_with("songs")
client.table.return_value.upsert.assert_called_once()
def test_create_job_inserts_and_returns_id():
repo, client = _repo_with_mock_client()
client.table.return_value.insert.return_value.execute.return_value = MagicMock(
data=[{"id": "job-uuid", "youtube_id": "abc", "status": "queued"}]
)
jid = repo.create_job("abc")
assert jid == "job-uuid"
def test_update_job_sets_status_and_error():
repo, client = _repo_with_mock_client()
client.table.return_value.update.return_value.eq.return_value.execute.return_value = MagicMock(data=[])
repo.update_job("job-uuid", status="failed_fetch", error="boom")
call = client.table.return_value.update.call_args[0][0]
assert call["status"] == "failed_fetch"
assert call["error"] == "boom"
assert "finished_at" in call
|