88 lines
3.0 KiB
Python
88 lines
3.0 KiB
Python
import json
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from music_server.app import create_app
|
|
|
|
|
|
class AppUpdateRouteTests(unittest.TestCase):
|
|
def test_app_version_json_returns_server_apk_download_url(self):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
release_dir = Path(tmp)
|
|
version_json = release_dir / "version.json"
|
|
apk_path = release_dir / "MusicFree_latest_release_universal.apk"
|
|
version_json.write_text(
|
|
json.dumps(
|
|
{
|
|
"version": "9.9.9",
|
|
"changeLog": ["server app update"],
|
|
"download": ["https://official.example/download"],
|
|
}
|
|
),
|
|
encoding="utf-8",
|
|
)
|
|
apk_path.write_bytes(b"fake-apk")
|
|
|
|
with patch.dict(
|
|
"os.environ",
|
|
{
|
|
"MUSICFREE_VERSION_JSON": str(version_json),
|
|
"MUSICFREE_APK_PATH": str(apk_path),
|
|
"MUSIC_SERVER_CACHE_RECONCILE_INTERVAL_SECONDS": "0",
|
|
},
|
|
clear=False,
|
|
):
|
|
client = TestClient(create_app())
|
|
|
|
response = client.get("/app/version.json")
|
|
|
|
self.assertEqual(200, response.status_code)
|
|
self.assertIn("application/json", response.headers.get("content-type", ""))
|
|
payload = response.json()
|
|
self.assertEqual("9.9.9", payload["version"])
|
|
self.assertEqual(["server app update"], payload["changeLog"])
|
|
self.assertEqual(
|
|
["http://testserver/app/MusicFree_latest_release_universal.apk"],
|
|
payload["download"],
|
|
)
|
|
|
|
def test_app_apk_route_serves_configured_apk_file(self):
|
|
with tempfile.TemporaryDirectory() as tmp:
|
|
release_dir = Path(tmp)
|
|
version_json = release_dir / "version.json"
|
|
apk_path = release_dir / "MusicFree_latest_release_universal.apk"
|
|
version_json.write_text(
|
|
json.dumps({"version": "9.9.9", "changeLog": [], "download": []}),
|
|
encoding="utf-8",
|
|
)
|
|
apk_path.write_bytes(b"fake-apk")
|
|
|
|
with patch.dict(
|
|
"os.environ",
|
|
{
|
|
"MUSICFREE_VERSION_JSON": str(version_json),
|
|
"MUSICFREE_APK_PATH": str(apk_path),
|
|
"MUSIC_SERVER_CACHE_RECONCILE_INTERVAL_SECONDS": "0",
|
|
},
|
|
clear=False,
|
|
):
|
|
client = TestClient(create_app())
|
|
|
|
response = client.get("/app/MusicFree_latest_release_universal.apk")
|
|
|
|
self.assertEqual(200, response.status_code)
|
|
self.assertEqual(b"fake-apk", response.content)
|
|
self.assertIn(
|
|
"application/vnd.android.package-archive",
|
|
response.headers.get("content-type", ""),
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|
|
|