Files
site/WESP_REL/tests/test_sync_request_parser.py
T
2026-07-17 12:57:18 +03:00

71 lines
2.5 KiB
Python

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()