File size: 1,722 Bytes
8ba68cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
"""
Test configuration and fixtures

Sets up test database (SQLite in-memory) and mocks Redis cache
so tests can run independently without external services.
"""

import pytest
import sys
from unittest.mock import MagicMock, patch

# Mock Redis BEFORE importing any app modules
mock_redis = MagicMock()
mock_redis.get.return_value = None
mock_redis.setex.return_value = True
mock_redis.keys.return_value = []
mock_redis.delete.return_value = True
mock_redis.dbsize.return_value = 0
mock_redis.info.return_value = {"used_memory": 0, "keyspace_hits": 0, "keyspace_misses": 0}

# Patch redis.from_url before cache module is imported
with patch('redis.from_url', return_value=mock_redis):
    # Now import the app modules
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    from sqlalchemy.pool import StaticPool
    from src.database import Base, get_db
    from src.main import app

# Create in-memory SQLite database for testing
SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"

test_engine = create_engine(
    SQLALCHEMY_DATABASE_URL,
    connect_args={"check_same_thread": False},
    poolclass=StaticPool,
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=test_engine)

# Create tables
Base.metadata.create_all(bind=test_engine)


def override_get_db():
    """Provide test database session"""
    db = TestingSessionLocal()
    try:
        yield db
    finally:
        db.close()


# Override the dependency
app.dependency_overrides[get_db] = override_get_db


@pytest.fixture(scope="module")
def client():
    """Create test client with mocked dependencies"""
    from fastapi.testclient import TestClient
    with TestClient(app) as c:
        yield c