110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
"""
|
|
Tests for the Pydantic models in ra_aid.database.pydantic_models
|
|
"""
|
|
|
|
import datetime
|
|
import json
|
|
import pytest
|
|
|
|
from ra_aid.database.models import Session
|
|
from ra_aid.database.pydantic_models import SessionModel
|
|
|
|
|
|
class TestSessionModel:
|
|
"""Tests for the SessionModel Pydantic model"""
|
|
|
|
def test_from_peewee_model(self):
|
|
"""Test conversion from a Peewee model instance"""
|
|
# Create a Peewee Session instance
|
|
now = datetime.datetime.now()
|
|
metadata = {"os": "Linux", "cpu_cores": 8, "memory_gb": 16}
|
|
session = Session(
|
|
id=1,
|
|
created_at=now,
|
|
updated_at=now,
|
|
start_time=now,
|
|
command_line="ra-aid run",
|
|
program_version="1.0.0",
|
|
machine_info=json.dumps(metadata)
|
|
)
|
|
|
|
# Convert to Pydantic model
|
|
session_model = SessionModel.model_validate(session, from_attributes=True)
|
|
|
|
# Verify fields
|
|
assert session_model.id == 1
|
|
assert session_model.created_at == now
|
|
assert session_model.updated_at == now
|
|
assert session_model.start_time == now
|
|
assert session_model.command_line == "ra-aid run"
|
|
assert session_model.program_version == "1.0.0"
|
|
assert session_model.machine_info == metadata
|
|
|
|
def test_with_dict_machine_info(self):
|
|
"""Test creating a model with a dict for machine_info"""
|
|
# Create directly with a dict for machine_info
|
|
now = datetime.datetime.now()
|
|
metadata = {"os": "Windows", "cpu_cores": 4, "memory_gb": 8}
|
|
|
|
session_model = SessionModel(
|
|
id=2,
|
|
created_at=now,
|
|
updated_at=now,
|
|
start_time=now,
|
|
command_line="ra-aid --debug",
|
|
program_version="1.0.1",
|
|
machine_info=metadata
|
|
)
|
|
|
|
# Verify fields
|
|
assert session_model.id == 2
|
|
assert session_model.machine_info == metadata
|
|
|
|
def test_with_none_machine_info(self):
|
|
"""Test creating a model with None for machine_info"""
|
|
now = datetime.datetime.now()
|
|
|
|
session_model = SessionModel(
|
|
id=3,
|
|
created_at=now,
|
|
updated_at=now,
|
|
start_time=now,
|
|
command_line="ra-aid",
|
|
program_version="1.0.0",
|
|
machine_info=None
|
|
)
|
|
|
|
assert session_model.id == 3
|
|
assert session_model.machine_info is None
|
|
|
|
def test_invalid_json_machine_info(self):
|
|
"""Test error handling for invalid JSON in machine_info"""
|
|
now = datetime.datetime.now()
|
|
|
|
# Invalid JSON string should raise ValueError
|
|
with pytest.raises(ValueError):
|
|
SessionModel(
|
|
id=4,
|
|
created_at=now,
|
|
updated_at=now,
|
|
start_time=now,
|
|
command_line="ra-aid",
|
|
program_version="1.0.0",
|
|
machine_info="{invalid json}"
|
|
)
|
|
|
|
def test_unexpected_type_machine_info(self):
|
|
"""Test error handling for unexpected type in machine_info"""
|
|
now = datetime.datetime.now()
|
|
|
|
# Integer type should raise ValueError
|
|
with pytest.raises(ValueError):
|
|
SessionModel(
|
|
id=5,
|
|
created_at=now,
|
|
updated_at=now,
|
|
start_time=now,
|
|
command_line="ra-aid",
|
|
program_version="1.0.0",
|
|
machine_info=123 # Not a dict or string
|
|
) |