diff --git a/geomagio/api/db/MetadataDatabaseFactory.py b/geomagio/api/db/MetadataDatabaseFactory.py
index 19463248c20d753430cf889b6a3018e2a184e2e8..b2274e8c4e1e0618fa532333144f377e802418b1 100644
--- a/geomagio/api/db/MetadataDatabaseFactory.py
+++ b/geomagio/api/db/MetadataDatabaseFactory.py
@@ -15,17 +15,11 @@ class MetadataDatabaseFactory(object):
         self.database = database
 
     async def create_metadata(self, meta: Metadata) -> Metadata:
-        print(1)
         query = metadata_table.insert()
-        print(2)
         meta.status = meta.status or "new"
-        print(3)
         values = meta.model_dump(exclude={"id", "metadata_id"}, exclude_none=True)
-        print(4)
         query = query.values(**values)
-        print(5)
         meta.id = await self.database.execute(query)
-        print(6)
         return meta
 
     async def get_metadata(
diff --git a/geomagio/metadata/Metadata.py b/geomagio/metadata/Metadata.py
index 7cae043007c9c4020d26a3b040c611fc6ec7a9d5..53f605f0767da2378b16a2257f60c1f862d0dd65 100644
--- a/geomagio/metadata/Metadata.py
+++ b/geomagio/metadata/Metadata.py
@@ -2,7 +2,7 @@ from datetime import timezone
 from typing import Dict, Optional
 
 from obspy import UTCDateTime
-from pydantic import field_validator, field_serializer, BaseModel
+from pydantic import field_validator, field_serializer, BaseModel, Field
 
 from .MetadataCategory import MetadataCategory
 from ..pydantic_utcdatetime import CustomUTCDateTimeType
@@ -52,7 +52,9 @@ class Metadata(BaseModel):
     metadata_id: Optional[int] = None
     # author
     created_by: Optional[str] = None
-    created_time: Optional[CustomUTCDateTimeType] = None
+    created_time: CustomUTCDateTimeType = Field(
+        default_factory=lambda: UTCDateTime()
+    )
     # editor
     updated_by: Optional[str] = None
     updated_time: Optional[CustomUTCDateTimeType] = None
@@ -104,8 +106,3 @@ class Metadata(BaseModel):
         if self.endtime is not None:
             self.endtime = self.endtime.datetime.replace(tzinfo=timezone.utc)
         return self.endtime
-
-    @field_validator("created_time")
-    @classmethod
-    def set_default_created_time(cls, created_time: UTCDateTime = None) -> UTCDateTime:
-        return created_time or UTCDateTime()
diff --git a/test/db/MetadataDatabaseFactory_test.py b/test/db/MetadataDatabaseFactory_test.py
index 6a7072807bb55444b204823d87fae54d490c1533..d77050014e075f0264339e2819f9b636224da8d6 100644
--- a/test/db/MetadataDatabaseFactory_test.py
+++ b/test/db/MetadataDatabaseFactory_test.py
@@ -1,15 +1,17 @@
+import datetime
 import unittest
-from unittest.mock import AsyncMock, patch, MagicMock
+from unittest.mock import AsyncMock, patch
 from databases import Database
 
+from obspy import UTCDateTime
+
 from geomagio.api.db import MetadataDatabaseFactory
 from geomagio.metadata import Metadata, MetadataCategory
-from geomagio.api.db.metadata_table import metadata as metadata_table
 
 class TestMetadataDatabaseFactory(unittest.IsolatedAsyncioTestCase):
 
     @patch("databases.Database.execute", new_callable=AsyncMock)
-    async def test_create_metadata(self, mock_execute):
+    async def test_create_metadata_defaults(self, mock_execute):
         test_data = Metadata(
             category=MetadataCategory.INSTRUMENT,
             created_by="test_metadata.py",
@@ -42,6 +44,7 @@ class TestMetadataDatabaseFactory(unittest.IsolatedAsyncioTestCase):
 
         await MetadataDatabaseFactory(database=db).create_metadata(test_data)
 
+        # assert data_valid, priority, and status are set to the correct defaults
         expected_values = {
             "category": "instrument",
             "created_by": "test_metadata.py",
@@ -73,11 +76,160 @@ class TestMetadataDatabaseFactory(unittest.IsolatedAsyncioTestCase):
             "status": "new"
         }
 
-        expected_insert = metadata_table.insert().values(**expected_values)
-
         mock_execute.assert_called_once()
-        mock_params = mock_execute.call_args.args[0].compile().params
+        called_params = mock_execute.call_args.args[0].compile().params
+
+        assert called_params == expected_values
+
+    # @patch("databases.Database.execute", new_callable=AsyncMock)
+    # async def test_create_metadata_with_ids(self, mock_execute):
+    #     now = datetime.datetime.now(tz=datetime.timezone.utc)
+    #     test_data = Metadata(
+    #         id=1234,
+    #         created_time=now,
+    #         metadata_id=5678,
+    #         category=MetadataCategory.INSTRUMENT,
+    #         created_by="test_metadata.py",
+    #         network="NT",
+    #         station="BDT",
+    #         metadata={
+    #             "type": "FGE",
+    #             "channels": {
+    #                 "U": [{"channel": "U_Volt", "offset": 0, "scale": 313.2}],
+    #                 "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.3}],
+    #                 "W": [{"channel": "W_Volt", "offset": 0, "scale": 312.0}],
+    #             },
+    #             "electronics": {
+    #                 "serial": "E0542",
+    #                 "x-scale": 313.2,
+    #                 "y-scale": 312.3,
+    #                 "z-scale": 312.0,
+    #                 "temperature-scale": 0.01,
+    #             },
+    #             "sensor": {
+    #                 "serial": "S0419",
+    #                 "x-constant": 36958,
+    #                 "y-constant": 36849,
+    #                 "z-constant": 36811,
+    #             },
+    #         },
+    #     )
+
+    #     db = Database("sqlite:///:memory:")
+
+    #     await MetadataDatabaseFactory(database=db).create_metadata(test_data)
+
+    #     # assert id is removed
+    #     expected_values = {
+    #         "created_time": now,
+    #         "category": "instrument",
+    #         "created_by": "test_metadata.py",
+    #         "network": "NT",
+    #         "station": "BDT",
+    #         "metadata": {
+    #             "type": "FGE",
+    #             "channels": {
+    #                 "U": [{"channel": "U_Volt", "offset": 0, "scale": 313.2}],
+    #                 "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.3}],
+    #                 "W": [{"channel": "W_Volt", "offset": 0, "scale": 312.0}],
+    #             },
+    #             "electronics": {
+    #                 "serial": "E0542",
+    #                 "x-scale": 313.2,
+    #                 "y-scale": 312.3,
+    #                 "z-scale": 312.0,
+    #                 "temperature-scale": 0.01,
+    #             },
+    #             "sensor": {
+    #                 "serial": "S0419",
+    #                 "x-constant": 36958,
+    #                 "y-constant": 36849,
+    #                 "z-constant": 36811,
+    #             },
+    #         },
+    #         "data_valid": True,
+    #         "priority": 1,
+    #         "status": "new"
+    #     }
+
+    #     mock_execute.assert_called_once()
+    #     called_params = mock_execute.call_args.args[0].compile().params
+
+    #     assert called_params == expected_values
+
+    # @patch("databases.Database.execute", new_callable=AsyncMock)
+    # async def test_create_metadata_with_metadata_id(self, mock_execute):
+    #     test_data = Metadata(
+    #         metadata_id=5678,
+    #         category=MetadataCategory.INSTRUMENT,
+    #         created_by="test_metadata.py",
+    #         network="NT",
+    #         station="BDT",
+    #         metadata={
+    #             "type": "FGE",
+    #             "channels": {
+    #                 "U": [{"channel": "U_Volt", "offset": 0, "scale": 313.2}],
+    #                 "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.3}],
+    #                 "W": [{"channel": "W_Volt", "offset": 0, "scale": 312.0}],
+    #             },
+    #             "electronics": {
+    #                 "serial": "E0542",
+    #                 "x-scale": 313.2,
+    #                 "y-scale": 312.3,
+    #                 "z-scale": 312.0,
+    #                 "temperature-scale": 0.01,
+    #             },
+    #             "sensor": {
+    #                 "serial": "S0419",
+    #                 "x-constant": 36958,
+    #                 "y-constant": 36849,
+    #                 "z-constant": 36811,
+    #             },
+    #         },
+    #     )
+
+    #     db = Database("sqlite:///:memory:")
+
+    #     await MetadataDatabaseFactory(database=db).create_metadata(test_data)
+
+    #     # assert metadata_id is removed on values
+    #     expected_values = {
+    #         "metadata_id": 5678,
+    #         "category": "instrument",
+    #         "created_by": "test_metadata.py",
+    #         "network": "NT",
+    #         "station": "BDT",
+    #         "metadata": {
+    #             "type": "FGE",
+    #             "channels": {
+    #                 "U": [{"channel": "U_Volt", "offset": 0, "scale": 313.2}],
+    #                 "V": [{"channel": "V_Volt", "offset": 0, "scale": 312.3}],
+    #                 "W": [{"channel": "W_Volt", "offset": 0, "scale": 312.0}],
+    #             },
+    #             "electronics": {
+    #                 "serial": "E0542",
+    #                 "x-scale": 313.2,
+    #                 "y-scale": 312.3,
+    #                 "z-scale": 312.0,
+    #                 "temperature-scale": 0.01,
+    #             },
+    #             "sensor": {
+    #                 "serial": "S0419",
+    #                 "x-constant": 36958,
+    #                 "y-constant": 36849,
+    #                 "z-constant": 36811,
+    #             },
+    #         },
+    #         "data_valid": True,
+    #         "priority": 1,
+    #         "status": "new"
+    #     }
+
+    #     expected_insert = metadata_table.insert().values(**expected_values)
+    #     expected_params = expected_insert.compile().params
+
 
-        expected_params = expected_insert.compile().params
+    #     mock_execute.assert_called_once()
+    #     called_params = mock_execute.call_args.args[0].compile().params
 
-        assert mock_params == expected_params
+    #     assert called_params == expected_params
\ No newline at end of file