"""Round 58: "lookup on youtube" in a song's right-click menu. The URL is built by a pure helper so the query encoding can be checked without opening a browser. """ from PyQt6.QtCore import QUrl, QUrlQuery from lintunes.models import Track from lintunes.gui.track_table import youtube_search_url def _query(url): return QUrlQuery(url).queryItemValue( "search_query", QUrl.ComponentFormattingOption.FullyDecoded) def test_title_then_artist(qapp): url = youtube_search_url(Track(track_id=1, name="I Know", artist="Dionne Farris")) assert url.scheme() == "https" assert url.host() == "www.youtube.com" assert url.path() == "/results" assert _query(url) == "I Know Dionne Farris" def test_special_characters_survive(qapp): track = Track(track_id=1, name="Rock & Roll #9 ✨", artist="Beyoncé") url = youtube_search_url(track) assert _query(url) == "Rock & Roll #9 ✨ Beyoncé" encoded = url.toString(QUrl.ComponentFormattingOption.FullyEncoded) assert "&" not in encoded.split("search_query=", 1)[1] assert "#" not in encoded def test_missing_artist_has_no_trailing_space(qapp): url = youtube_search_url(Track(track_id=1, name="Zuuso")) assert _query(url) == "Zuuso"