@@ -0,0 +1,70 @@
|
||||
import gzip
|
||||
import unittest
|
||||
|
||||
from flask import Flask, request
|
||||
|
||||
from app.routes.sync_request_parser import (
|
||||
parse_confirm_payload,
|
||||
parse_json_request,
|
||||
parse_pull_payload,
|
||||
parse_push_payload,
|
||||
)
|
||||
|
||||
|
||||
class SyncRequestParserTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.app = Flask(__name__)
|
||||
|
||||
def test_parse_json_request_with_gzip(self) -> None:
|
||||
payload = gzip.compress(b'{"client_id":"c1","changes":[]}')
|
||||
with self.app.test_request_context(
|
||||
"/api/sync/push",
|
||||
method="POST",
|
||||
data=payload,
|
||||
headers={"Content-Encoding": "gzip"},
|
||||
):
|
||||
data, error = parse_json_request(request, allow_gzip=True)
|
||||
self.assertIsNone(error)
|
||||
self.assertEqual(data, {"client_id": "c1", "changes": []})
|
||||
|
||||
def test_parse_json_request_invalid_content_type(self) -> None:
|
||||
with self.app.test_request_context("/api/sync/pull", method="POST", data="not-json"):
|
||||
data, error = parse_json_request(request)
|
||||
self.assertIsNone(data)
|
||||
self.assertEqual(error, "Content-Type должен быть application/json")
|
||||
|
||||
def test_parse_pull_payload_limit_validation(self) -> None:
|
||||
client_id, limit, cname, error = parse_pull_payload({"client_id": "node-1", "limit": "25"})
|
||||
self.assertIsNone(error)
|
||||
self.assertEqual(client_id, "node-1")
|
||||
self.assertEqual(limit, 25)
|
||||
self.assertIsNone(cname)
|
||||
|
||||
client_id, limit, cname, error = parse_pull_payload(
|
||||
{"client_id": "node-1", "limit": "25", "client_name": " Field-1 "}
|
||||
)
|
||||
self.assertIsNone(error)
|
||||
self.assertEqual(cname, "Field-1")
|
||||
|
||||
client_id, limit, cname, error = parse_pull_payload({"client_id": "node-1", "limit": "bad"})
|
||||
self.assertIsNone(client_id)
|
||||
self.assertIsNone(limit)
|
||||
self.assertIsNone(cname)
|
||||
self.assertEqual(error, "limit должен быть числом")
|
||||
|
||||
def test_parse_confirm_and_push_payloads(self) -> None:
|
||||
client_id, task_ids, error = parse_confirm_payload(
|
||||
{"client_id": "node-1", "task_ids": ["t1", "t2"]}
|
||||
)
|
||||
self.assertIsNone(error)
|
||||
self.assertEqual(client_id, "node-1")
|
||||
self.assertEqual(task_ids, ["t1", "t2"])
|
||||
|
||||
client_id, changes, error = parse_push_payload({"client_id": "node-1", "changes": []})
|
||||
self.assertIsNone(error)
|
||||
self.assertEqual(client_id, "node-1")
|
||||
self.assertEqual(changes, [])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user