48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
"""Test per core.traxsource."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from core import traxsource
|
|
|
|
|
|
class TestListGenres:
|
|
def test_returns_list_of_dicts(self):
|
|
result = traxsource.list_genres()
|
|
assert isinstance(result, list)
|
|
assert len(result) >= 10
|
|
for g in result:
|
|
assert set(g.keys()) == {"slug", "id", "name"}
|
|
assert isinstance(g["slug"], str) and g["slug"]
|
|
assert isinstance(g["id"], int) and g["id"] > 0
|
|
assert isinstance(g["name"], str) and g["name"]
|
|
|
|
def test_sorted_alphabetically_by_name(self):
|
|
result = traxsource.list_genres()
|
|
names = [g["name"] for g in result]
|
|
assert names == sorted(names, key=str.casefold)
|
|
|
|
def test_tech_house_present(self):
|
|
result = traxsource.list_genres()
|
|
slugs = [g["slug"] for g in result]
|
|
assert "tech-house" in slugs
|
|
|
|
|
|
class TestTraxsourceTrack:
|
|
def test_frozen(self):
|
|
t = traxsource.TraxsourceTrack(
|
|
position=1, title="X", mix="Y", artists="A", label="L",
|
|
traxsource_id=1, slug="x",
|
|
)
|
|
with pytest.raises(Exception):
|
|
t.title = "Z"
|
|
|
|
def test_defaults(self):
|
|
t = traxsource.TraxsourceTrack(
|
|
position=1, title="X", mix="", artists="A", label="",
|
|
traxsource_id=1, slug="x",
|
|
)
|
|
assert t.image_url == ""
|
|
assert t.cover_url_large == ""
|