From bc479802db8fc0d9500f7e66fb2077599598bd71 Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Tue, 26 May 2026 20:01:37 +0000 Subject: [PATCH] test(kevin): fix enum assertion + mark Postgres-dependent tests as integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pipeline #46 surfaced two pre-existing CI bugs once fakeredis was installed and tests could collect: 1. test_models.py:389 asserted "DISCOVERED" in status_col.type.enums, but the model defines KevinVideoStatus with values_callable so .enums returns the lowercase string values, not member names. Asserting "discovered" instead. 2. Four test files use the db_session fixture which requires a real Postgres on localhost:5432. CI has no Postgres, so 10 tests failed with Connect call failed (errno 111). These genuinely need a DB — mirroring tests/integration/* which already use @pytest.mark.integration. Adding module-level pytestmark = pytest.mark.integration to: - tests/shared/models/test_meet_kevin_trading.py - tests/services/kevin_signal_bridge/test_aggregator.py - tests/services/kevin_signal_bridge/test_audit.py - tests/services/kevin_signal_bridge/test_exit_scanner.py CI runs with -m "not integration" so they're now deselected. Local pytest still picks them up by default (no marker filter). --- tests/services/kevin_signal_bridge/test_aggregator.py | 2 ++ tests/services/kevin_signal_bridge/test_audit.py | 2 ++ tests/services/kevin_signal_bridge/test_exit_scanner.py | 2 ++ tests/shared/models/test_meet_kevin_trading.py | 2 ++ tests/test_models.py | 4 ++-- 5 files changed, 10 insertions(+), 2 deletions(-) diff --git a/tests/services/kevin_signal_bridge/test_aggregator.py b/tests/services/kevin_signal_bridge/test_aggregator.py index f217e93..648b906 100644 --- a/tests/services/kevin_signal_bridge/test_aggregator.py +++ b/tests/services/kevin_signal_bridge/test_aggregator.py @@ -6,6 +6,8 @@ from decimal import Decimal import pytest from sqlalchemy.ext.asyncio import AsyncSession +pytestmark = pytest.mark.integration + from services.kevin_signal_bridge.aggregator import MentionAggregator from shared.models.meet_kevin import ( KevinAnalysis, diff --git a/tests/services/kevin_signal_bridge/test_audit.py b/tests/services/kevin_signal_bridge/test_audit.py index 320b343..65134b6 100644 --- a/tests/services/kevin_signal_bridge/test_audit.py +++ b/tests/services/kevin_signal_bridge/test_audit.py @@ -7,6 +7,8 @@ import pytest from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession +pytestmark = pytest.mark.integration + from services.kevin_signal_bridge.audit import AuditWriter from shared.models.meet_kevin import ( KevinAnalysis, diff --git a/tests/services/kevin_signal_bridge/test_exit_scanner.py b/tests/services/kevin_signal_bridge/test_exit_scanner.py index a12c833..a2fbf26 100644 --- a/tests/services/kevin_signal_bridge/test_exit_scanner.py +++ b/tests/services/kevin_signal_bridge/test_exit_scanner.py @@ -7,6 +7,8 @@ from unittest.mock import AsyncMock, MagicMock import pytest from sqlalchemy.ext.asyncio import AsyncSession +pytestmark = pytest.mark.integration + from services.kevin_signal_bridge.exit_scanner import ExitScanner from shared.constants.kevin import KEVIN_STRATEGY_UUID from shared.models.meet_kevin import ( diff --git a/tests/shared/models/test_meet_kevin_trading.py b/tests/shared/models/test_meet_kevin_trading.py index 0f18854..78b37f4 100644 --- a/tests/shared/models/test_meet_kevin_trading.py +++ b/tests/shared/models/test_meet_kevin_trading.py @@ -8,6 +8,8 @@ import pytest from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession +pytestmark = pytest.mark.integration + from shared.models.meet_kevin import ( KevinAnalysis, KevinChannel, diff --git a/tests/test_models.py b/tests/test_models.py index bac7b41..e4726b0 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -383,10 +383,10 @@ class TestMeetKevinModels: assert KevinAnalysis.__tablename__ == "kevin_analyses" assert KevinStockMention.__tablename__ == "kevin_stock_mentions" - # Check that KevinVideo.status is an Enum containing "DISCOVERED" + # SAEnum uses values_callable, so .enums returns lowercase values, not member names. status_col = KevinVideo.__table__.c.status assert status_col is not None - assert "DISCOVERED" in status_col.type.enums + assert "discovered" in status_col.type.enums # Check relationships exist assert hasattr(KevinChannel, "videos")