@@ -0,0 +1,62 @@
|
||||
import unittest
|
||||
|
||||
import requests
|
||||
|
||||
from app.services.sync_error_display import (
|
||||
friendly_sync_transport_message,
|
||||
is_server_connection_error_message,
|
||||
is_transient_sync_transport_error,
|
||||
sync_error_text_for_display,
|
||||
)
|
||||
|
||||
|
||||
class SyncErrorDisplayTests(unittest.TestCase):
|
||||
def test_hides_typical_requests_connection_errors(self) -> None:
|
||||
samples = [
|
||||
"HTTPConnectionPool(host='10.0.0.1', port=5000): Max retries exceeded with url: /api/sync/ping",
|
||||
"HTTPSConnectionPool(host='x', port=443): Failed to establish a new connection: [Errno 111] Connection refused",
|
||||
"NewConnectionError: connection refused",
|
||||
"ConnectTimeoutError",
|
||||
"getaddrinfo failed for host",
|
||||
]
|
||||
for s in samples:
|
||||
with self.subTest(msg=s):
|
||||
self.assertTrue(is_server_connection_error_message(s), s)
|
||||
self.assertIsNone(sync_error_text_for_display(s))
|
||||
|
||||
def test_shows_logic_and_data_errors(self) -> None:
|
||||
samples = [
|
||||
"duplicate key value violates unique constraint",
|
||||
"ValueError: invalid payload",
|
||||
"IntegrityError: NOT NULL constraint failed",
|
||||
"conflict on recipe version",
|
||||
]
|
||||
for s in samples:
|
||||
with self.subTest(msg=s):
|
||||
self.assertFalse(is_server_connection_error_message(s), s)
|
||||
self.assertEqual(sync_error_text_for_display(s), s)
|
||||
|
||||
def test_empty_none(self) -> None:
|
||||
self.assertFalse(is_server_connection_error_message(None))
|
||||
self.assertFalse(is_server_connection_error_message(""))
|
||||
self.assertIsNone(sync_error_text_for_display(None))
|
||||
self.assertIsNone(sync_error_text_for_display(" "))
|
||||
|
||||
def test_friendly_dns_message(self) -> None:
|
||||
exc = requests.ConnectionError(
|
||||
"HTTPConnectionPool(host='a1.local', port=80): Failed to resolve 'a1.local'"
|
||||
)
|
||||
self.assertTrue(is_transient_sync_transport_error(exc))
|
||||
msg = friendly_sync_transport_message(exc, server_url="http://a1.local/")
|
||||
self.assertIn("a1.local", msg)
|
||||
self.assertIn("mDNS", msg)
|
||||
|
||||
def test_friendly_refused_message(self) -> None:
|
||||
exc = requests.ConnectionError("Connection refused")
|
||||
msg = friendly_sync_transport_message(exc, server_url="http://192.168.1.10:80/")
|
||||
self.assertIn("192.168.1.10", msg)
|
||||
self.assertIn("отказ", msg.lower())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user