diff --git a/swh/model/model.py b/swh/model/model.py
index 6df310a0f35ce769ccf21305814691c514b662f9..1c46f2a0b0ff4f3cc2b79a6807b350e123d603f1 100644
--- a/swh/model/model.py
+++ b/swh/model/model.py
@@ -848,7 +848,10 @@ class MetadataAuthority(BaseModel):
 
     @classmethod
     def from_dict(cls, d):
-        d["type"] = MetadataAuthorityType(d["type"])
+        d = {
+            **d,
+            "type": MetadataAuthorityType(d["type"]),
+        }
         return super().from_dict(d)
 
     def unique_key(self) -> KeyType:
diff --git a/swh/model/tests/test_model.py b/swh/model/tests/test_model.py
index 2c84d714e882fc76e024d78fdf1e5443a33f190c..bf9725c628c337b8d701ad73ee7b39dba25d060e 100644
--- a/swh/model/tests/test_model.py
+++ b/swh/model/tests/test_model.py
@@ -45,6 +45,7 @@ from swh.model.model import (
     Timestamp,
     TimestampWithTimezone,
 )
+from swh.model.tests.swh_model_data import TEST_OBJECTS
 from swh.model.tests.test_identifiers import (
     content_example,
     directory_example,
@@ -78,6 +79,17 @@ def test_todict_inverse_fromdict(objtype_and_obj):
     assert obj_as_dict == type(obj).from_dict(obj_as_dict).to_dict()
 
 
+@pytest.mark.parametrize("object_type, objects", TEST_OBJECTS.items())
+def test_swh_model_todict_fromdict(object_type, objects):
+    """checks model objects in swh_model_data are in correct shape"""
+    assert objects
+    for obj in objects:
+        # Check the composition of from_dict and to_dict is the identity
+        obj_as_dict = obj.to_dict()
+        assert obj == type(obj).from_dict(obj_as_dict)
+        assert obj_as_dict == type(obj).from_dict(obj_as_dict).to_dict()
+
+
 def test_unique_key():
     url = "http://example.org/"
     date = datetime.datetime.now(tz=datetime.timezone.utc)