71 lines
2.5 KiB
Python
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()
|