Skip to main content
Glama

basic-memory

test_base_timeframe_minimum.py4.51 kB
"""Test minimum 1-day timeframe enforcement for timezone handling.""" from datetime import datetime, timedelta import pytest from freezegun import freeze_time from basic_memory.schemas.base import parse_timeframe class TestTimeframeMinimum: """Test that parse_timeframe enforces a minimum 1-day lookback.""" @freeze_time("2025-01-15 15:00:00") def test_today_returns_one_day_ago(self): """Test that 'today' returns 1 day ago instead of start of today.""" result = parse_timeframe("today") now = datetime.now() one_day_ago = now - timedelta(days=1) # Should be approximately 1 day ago (within a second for test tolerance) diff = abs((result.replace(tzinfo=None) - one_day_ago).total_seconds()) assert diff < 1, f"Expected ~1 day ago, got {result}" @freeze_time("2025-01-15 15:00:00") def test_one_hour_returns_one_day_minimum(self): """Test that '1h' returns 1 day ago due to minimum enforcement.""" result = parse_timeframe("1h") now = datetime.now() one_day_ago = now - timedelta(days=1) # Should be approximately 1 day ago, not 1 hour ago diff = abs((result.replace(tzinfo=None) - one_day_ago).total_seconds()) assert diff < 1, f"Expected ~1 day ago for '1h', got {result}" @freeze_time("2025-01-15 15:00:00") def test_six_hours_returns_one_day_minimum(self): """Test that '6h' returns 1 day ago due to minimum enforcement.""" result = parse_timeframe("6h") now = datetime.now() one_day_ago = now - timedelta(days=1) # Should be approximately 1 day ago, not 6 hours ago diff = abs((result.replace(tzinfo=None) - one_day_ago).total_seconds()) assert diff < 1, f"Expected ~1 day ago for '6h', got {result}" @freeze_time("2025-01-15 15:00:00") def test_one_day_returns_one_day(self): """Test that '1d' correctly returns approximately 1 day ago.""" result = parse_timeframe("1d") now = datetime.now() one_day_ago = now - timedelta(days=1) # Should be approximately 1 day ago (within 24 hours) diff_hours = abs((result.replace(tzinfo=None) - one_day_ago).total_seconds()) / 3600 assert diff_hours < 24, ( f"Expected ~1 day ago for '1d', got {result} (diff: {diff_hours} hours)" ) @freeze_time("2025-01-15 15:00:00") def test_two_days_returns_two_days(self): """Test that '2d' correctly returns approximately 2 days ago (not affected by minimum).""" result = parse_timeframe("2d") now = datetime.now() two_days_ago = now - timedelta(days=2) # Should be approximately 2 days ago (within 24 hours) diff_hours = abs((result.replace(tzinfo=None) - two_days_ago).total_seconds()) / 3600 assert diff_hours < 24, ( f"Expected ~2 days ago for '2d', got {result} (diff: {diff_hours} hours)" ) @freeze_time("2025-01-15 15:00:00") def test_one_week_returns_one_week(self): """Test that '1 week' correctly returns approximately 1 week ago (not affected by minimum).""" result = parse_timeframe("1 week") now = datetime.now() one_week_ago = now - timedelta(weeks=1) # Should be approximately 1 week ago (within 24 hours) diff_hours = abs((result.replace(tzinfo=None) - one_week_ago).total_seconds()) / 3600 assert diff_hours < 24, ( f"Expected ~1 week ago for '1 week', got {result} (diff: {diff_hours} hours)" ) @freeze_time("2025-01-15 15:00:00") def test_zero_days_returns_one_day_minimum(self): """Test that '0d' returns 1 day ago due to minimum enforcement.""" result = parse_timeframe("0d") now = datetime.now() one_day_ago = now - timedelta(days=1) # Should be approximately 1 day ago, not now diff = abs((result.replace(tzinfo=None) - one_day_ago).total_seconds()) assert diff < 1, f"Expected ~1 day ago for '0d', got {result}" def test_timezone_awareness(self): """Test that returned datetime is timezone-aware.""" result = parse_timeframe("1d") assert result.tzinfo is not None, "Expected timezone-aware datetime" def test_invalid_timeframe_raises_error(self): """Test that invalid timeframe strings raise ValueError.""" with pytest.raises(ValueError, match="Could not parse timeframe"): parse_timeframe("invalid_timeframe")

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/basicmachines-co/basic-memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server