42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import logging
|
|
import unittest
|
|
from unittest.mock import AsyncMock
|
|
|
|
from app.netease_resolver import NeteaseResolver
|
|
|
|
|
|
class NeteaseResolverTests(unittest.IsolatedAsyncioTestCase):
|
|
def setUp(self):
|
|
self.resolver = NeteaseResolver(logging.getLogger("test-netease"))
|
|
|
|
async def test_rejects_trial_audio_instead_of_playing_preview(self):
|
|
self.resolver._fetch_player_entry = AsyncMock(return_value={
|
|
"url": "https://example.test/trial.mp3",
|
|
"freeTrialInfo": {"start": 0, "end": 15000},
|
|
})
|
|
self.resolver._probe_url = AsyncMock(return_value="https://example.test/trial.mp3")
|
|
|
|
result = await self.resolver.resolve({"id": "123456", "name": "VIP歌曲"})
|
|
|
|
self.assertIsNone(result)
|
|
self.assertEqual(self.resolver.last_error_code, "preview_only")
|
|
self.resolver._probe_url.assert_not_awaited()
|
|
|
|
async def test_uses_authenticated_full_player_url(self):
|
|
self.resolver.update_auth("valid-cookie")
|
|
self.resolver._fetch_player_entry = AsyncMock(return_value={
|
|
"url": "https://example.test/full.mp3",
|
|
"freeTrialInfo": None,
|
|
"freeTrialPrivilege": {"resConsumable": False, "userConsumable": False},
|
|
})
|
|
self.resolver._probe_url = AsyncMock(return_value="https://cdn.test/full.mp3")
|
|
|
|
result = await self.resolver.resolve({"id": "123456", "name": "VIP歌曲"})
|
|
|
|
self.assertEqual(result["url"], "https://cdn.test/full.mp3")
|
|
self.assertEqual(result["source"], "netease.player.auth")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|