audio streaming app plyr.fm
38
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 2025.1230.154826 71 lines 2.9 kB view raw
1"""tests for user-agent parsing and span enrichment.""" 2 3import pytest 4 5from backend.main import parse_plyrfm_user_agent 6 7 8class TestParsePlyrfmUserAgent: 9 """tests for parse_plyrfm_user_agent function.""" 10 11 def test_sdk_user_agent(self) -> None: 12 """sdk user-agent returns client_type=sdk with version.""" 13 result = parse_plyrfm_user_agent("plyrfm/0.1.0") 14 assert result == {"client_type": "sdk", "client_version": "0.1.0"} 15 16 def test_mcp_user_agent(self) -> None: 17 """mcp user-agent returns client_type=mcp with version.""" 18 result = parse_plyrfm_user_agent("plyrfm-mcp/0.2.1") 19 assert result == {"client_type": "mcp", "client_version": "0.2.1"} 20 21 def test_browser_user_agent(self) -> None: 22 """standard browser user-agent returns client_type=browser.""" 23 result = parse_plyrfm_user_agent( 24 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " 25 "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" 26 ) 27 assert result == {"client_type": "browser"} 28 assert "client_version" not in result 29 30 def test_none_user_agent(self) -> None: 31 """missing user-agent returns client_type=browser.""" 32 result = parse_plyrfm_user_agent(None) 33 assert result == {"client_type": "browser"} 34 35 def test_empty_user_agent(self) -> None: 36 """empty string user-agent returns client_type=browser.""" 37 result = parse_plyrfm_user_agent("") 38 assert result == {"client_type": "browser"} 39 40 def test_curl_user_agent(self) -> None: 41 """curl user-agent returns client_type=browser (generic fallback).""" 42 result = parse_plyrfm_user_agent("curl/8.4.0") 43 assert result == {"client_type": "browser"} 44 45 @pytest.mark.parametrize( 46 ("user_agent", "expected_type", "expected_version"), 47 [ 48 ("plyrfm/1.0.0", "sdk", "1.0.0"), 49 ("plyrfm/0.0.1", "sdk", "0.0.1"), 50 ("plyrfm/10.20.30", "sdk", "10.20.30"), 51 ("plyrfm-mcp/1.0.0", "mcp", "1.0.0"), 52 ("plyrfm-mcp/0.0.1", "mcp", "0.0.1"), 53 ], 54 ) 55 def test_version_variations( 56 self, user_agent: str, expected_type: str, expected_version: str 57 ) -> None: 58 """various version formats are parsed correctly.""" 59 result = parse_plyrfm_user_agent(user_agent) 60 assert result["client_type"] == expected_type 61 assert result["client_version"] == expected_version 62 63 def test_plyrfm_prefix_not_at_start(self) -> None: 64 """plyrfm in middle of string is not matched (browser fallback).""" 65 result = parse_plyrfm_user_agent("Mozilla/5.0 plyrfm/1.0.0") 66 assert result == {"client_type": "browser"} 67 68 def test_invalid_version_format(self) -> None: 69 """invalid version format falls back to browser.""" 70 result = parse_plyrfm_user_agent("plyrfm/v1.0") 71 assert result == {"client_type": "browser"}