Files
XStats/Scripts/publish_api_test.py
T

52 lines
1.8 KiB
Python

#!/usr/bin/env python3
# Copyright (C) 2026 ysicing
# SPDX-License-Identifier: AGPL-3.0-or-later
import json
import tempfile
import threading
import unittest
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer
from pathlib import Path
import publish_api
class PublishAPITest(unittest.TestCase):
def test_sends_manifest_with_bearer_token(self) -> None:
received = {}
class Handler(BaseHTTPRequestHandler):
def do_PUT(self) -> None:
received["path"] = self.path
received["authorization"] = self.headers.get("Authorization")
received["content_type"] = self.headers.get("Content-Type")
received["body"] = json.loads(self.rfile.read(int(self.headers["Content-Length"])))
self.send_response(204)
self.end_headers()
def log_message(self, *_: object) -> None:
pass
server = ThreadingHTTPServer(("127.0.0.1", 0), Handler)
thread = threading.Thread(target=server.serve_forever, daemon=True)
thread.start()
try:
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "appcast.json"
path.write_text('{"version":"2026.09.21.03"}', encoding="utf-8")
publish_api.publish(path, f"http://127.0.0.1:{server.server_port}/api/v1/releases/current", "release-secret")
finally:
server.shutdown()
thread.join()
server.server_close()
self.assertEqual(received["path"], "/api/v1/releases/current")
self.assertEqual(received["authorization"], "Bearer release-secret")
self.assertEqual(received["content_type"], "application/json")
self.assertEqual(received["body"], {"version": "2026.09.21.03"})
if __name__ == "__main__":
unittest.main()