diff --git a/flyover/model/carte_table_model.py b/flyover/model/carte_table_model.py
index 07d286f..9657d9a 100644
--- a/flyover/model/carte_table_model.py
+++ b/flyover/model/carte_table_model.py
@@ -10,7 +10,7 @@
 
 
 def get_description_text(description: DatabuilderDescription):
-    return description._source
+    return description._text
 
 
 class ColumnType(Enum):
@@ -49,8 +49,8 @@ def from_databuilder(cls, column: DatabuilderColumnMetadata):
     def from_frontmatter(cls, meta_dict):
         return cls(
             name=meta_dict["name"],
-            column_type=meta_dict["type"],
-            description=meta_dict["description"],
+           column_type=meta_dict.get("type"),
+            description=meta_dict.get("description"),
         )
 
     def to_frontmatter(self):
@@ -67,6 +67,7 @@ def __repr__(self) -> str:
             self.description,
         )
 
+
 class TableMetadata:
     def __init__(
         self,
@@ -112,7 +113,7 @@ def from_frontmatter(cls, metadata, content):
         ]
 
         return cls(
-            name=metadata.get("title"),
+            name=metadata["title"],
             database=metadata.get("database", None),
             description=content,
             location=metadata.get("location", None),
diff --git a/tests/model/test_carte_table_model.py b/tests/model/test_carte_table_model.py
index e69de29..1c3502f 100644
--- a/tests/model/test_carte_table_model.py
+++ b/tests/model/test_carte_table_model.py
@@ -0,0 +1,103 @@
+import unittest
+from unittest.mock import patch
+
+from flyover.model.carte_table_model import TableMetadata, ColumnMetadata, TableType
+from databuilder.models.table_metadata import ColumnMetadata as DatabuilderColumn
+from databuilder.models.table_metadata import DescriptionMetadata as DatabuilderDescription
+from databuilder.models.table_metadata import TableMetadata as DatabuilderTable
+
+
+
+class TestColumnMetadata(unittest.TestCase):
+    def test_from_databuilder(self):
+        source_metadata = DatabuilderColumn(
+            "test-name",
+            "test-description",
+            "test-type",
+            1
+        )
+
+        result = ColumnMetadata.from_databuilder(source_metadata)
+
+        assert result.name == "test-name"
+        assert result.column_type == "test-type"
+        assert result.description == "test-description"
+
+    def test_from_frontmatter(self):
+        source_metadata = {
+            "name": "test-name",
+            "description": "test-description",
+            "type": "test-type"
+        }
+
+        result = ColumnMetadata.from_frontmatter(source_metadata)
+
+        assert result.name == "test-name"
+        assert result.description == "test-description"
+        assert result.column_type == "test-type"
+
+    def test_from_frontmatter_no_values(self):
+        source_metadata = {
+            "name": "test-name"
+        }
+
+        result = ColumnMetadata.from_frontmatter(source_metadata)
+
+        assert result.name == "test-name"
+        assert result.description is None
+        assert result.column_type is None
+
+    def test_from_frontmatter_raises_with_no_name(self):
+        self.assertRaises(KeyError, ColumnMetadata.from_frontmatter, {})
+
+    def test_to_frontmatter(self):
+        source = ColumnMetadata(
+            name="test-name",
+            column_type="test-type",
+            description="test-description"
+        )
+
+        result = source.to_frontmatter()
+
+        assert result == {
+            "name": "test-name",
+            "type": "test-type",
+            "description": "test-description"
+        }
+
+class TestTableMetadata(unittest.TestCase):
+    def test_from_databuilder(self):
+        source_metadata = DatabuilderTable(
+            "test-connection",
+            "test-cluster",
+            "test-db",
+            "test-name",
+            "test-description",
+            [
+                DatabuilderColumn("test-col-1", "test-descr1", "test-type1", 1),
+                DatabuilderColumn("test-col-2", "test-descr2", "test-type2", 2),
+            ],
+            False
+        )
+
+        result = TableMetadata.from_databuilder(source_metadata)
+
+        assert result.database == "test-db"
+        assert result.location == "test-connection://test-cluster.test-db/test-name"
+        assert result.connection == "test-connection"
+        assert len(result.columns) == 2
+        assert result.columns[0].__repr__() == ColumnMetadata(name="test-col-1", description="test-descr1", column_type="test-type1").__repr__()
+        assert result.columns[1].__repr__() == ColumnMetadata(name="test-col-2", description="test-descr2", column_type="test-type2").__repr__()
+        assert result.table_type == TableType.TABLE
+
+    def test_from_frontmatter(self):
+        pass
+
+    def test_from_frontmatter_no_values(self):
+        pass
+
+    def test_from_frontmatter_raises_with_no_name(self):
+        pass
+
+    def test_to_frontmatter(self):
+        pass
diff --git a/tests/utils/test_frontmatter.py b/tests/utils/test_frontmatter.py
index 7d630fc..bfb1bc1 100644
--- a/tests/utils/test_frontmatter.py
+++ b/tests/utils/test_frontmatter.py
@@ -1,6 +1,6 @@
 import os
 import unittest
-from unittest.mock import patch, create_autospec, mock_open
+from unittest.mock import patch, mock_open
 import pytest
 
 import flyover.utils.frontmatter as frontmatter