|
1 | 1 | """ test Rig """ |
2 | 2 |
|
3 | 3 | import unittest |
| 4 | +import json |
4 | 5 | from datetime import date, datetime |
5 | 6 |
|
6 | 7 | from aind_data_schema_models.modalities import Modality |
7 | 8 | from aind_data_schema_models.organizations import Organization |
8 | 9 | from pydantic import ValidationError |
| 10 | +from pydantic_core import PydanticSerializationError |
9 | 11 |
|
10 | 12 | from aind_data_schema.components.devices import ( |
11 | 13 | Calibration, |
@@ -821,6 +823,30 @@ def test_rig_id_validator(self): |
821 | 823 | calibrations=[calibration], |
822 | 824 | ) |
823 | 825 |
|
| 826 | + def test_serialize_modalities(self): |
| 827 | + """Tests that modalities serializer can handle different types""" |
| 828 | + expected_modalities = [{"name": "Extracellular electrophysiology", "abbreviation": "ecephys"}] |
| 829 | + # Case 1: Modality is a class instance |
| 830 | + rig_instance_modality = Rig.model_construct( |
| 831 | + modalities=[Modality.ECEPHYS] # Example with a valid Modality instance |
| 832 | + ) |
| 833 | + rig_json = rig_instance_modality.model_dump_json() |
| 834 | + rig_data = json.loads(rig_json) |
| 835 | + self.assertEqual(rig_data["modalities"], expected_modalities) |
| 836 | + |
| 837 | + # Case 2: Modality is a dictionary when Rig is constructed from JSON |
| 838 | + rig_dict_modality = Rig.model_construct(**rig_data) |
| 839 | + rig_dict_json = rig_dict_modality.model_dump_json() |
| 840 | + rig_dict_data = json.loads(rig_dict_json) |
| 841 | + self.assertEqual(rig_dict_data["modalities"], expected_modalities) |
| 842 | + |
| 843 | + # Case 3: Modality is an unknown type |
| 844 | + with self.assertRaises(PydanticSerializationError) as context: |
| 845 | + rig_unknown_modality = Rig.model_construct(modalities={"UnknownModality"}) |
| 846 | + |
| 847 | + rig_unknown_modality.model_dump_json() |
| 848 | + self.assertIn("Error calling function `serialize_modalities`", str(context.exception)) |
| 849 | + |
824 | 850 |
|
825 | 851 | if __name__ == "__main__": |
826 | 852 | unittest.main() |
0 commit comments