metisllm-dashboard / domain /domain_protocol_test.py
Gateston Johns
first real commit
9041389
from __future__ import annotations
import logging
import unittest
from google.protobuf import timestamp_pb2
import dataclasses
from domain.domain_protocol import DomainProtocol, ProtoDeserializationError
@dataclasses.dataclass(frozen=True)
class TimestampTestD(DomainProtocol[timestamp_pb2.Timestamp]):
nanos: int
@property
def id(self) -> str:
return str(self.nanos)
@classmethod
def _from_proto(cls, proto: timestamp_pb2.Timestamp) -> TimestampTestD:
return cls(nanos=proto.nanos)
def to_proto(self) -> timestamp_pb2.Timestamp:
return timestamp_pb2.Timestamp(nanos=self.nanos)
class DomainProtocolTest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.timestamp_d = TimestampTestD(nanos=1)
cls.timestamp_proto = timestamp_pb2.Timestamp(nanos=1)
def test_proto_roundtrip(self):
proto = self.timestamp_d.to_proto()
domain_from_proto = TimestampTestD.from_proto(proto)
self.assertEqual(self.timestamp_d, domain_from_proto)
def test_json_roundtrip(self):
json_str = self.timestamp_d.to_json()
domain_from_json = TimestampTestD.from_json(json_str)
self.assertEqual(self.timestamp_d, domain_from_json)
def test_from_proto_empty_fail(self):
empty_proto = timestamp_pb2.Timestamp()
with self.assertRaises(ProtoDeserializationError):
TimestampTestD.from_proto(empty_proto)
def test_from_proto_empty_allowed_flag(self):
empty_proto = timestamp_pb2.Timestamp()
domain_from_proto = TimestampTestD.from_proto(empty_proto, allow_empty=True)
self.assertEqual(TimestampTestD(nanos=0), domain_from_proto)
def test_validate_proto_not_empty(self):
empty_proto = timestamp_pb2.Timestamp()
with self.assertRaises(ValueError):
TimestampTestD.validate_proto_not_empty(empty_proto)
def test_is_empty(self):
empty_proto = timestamp_pb2.Timestamp()
self.assertTrue(TimestampTestD.is_empty(empty_proto))
def test_message_cls(self):
self.assertEqual(timestamp_pb2.Timestamp, TimestampTestD.message_cls())
if __name__ == "__main__":
logging.basicConfig(level=logging.INFO)
unittest.main()