Files
service_manager/tests/test_tenant_middleware.py

54 lines
2.0 KiB
Python

import sys
import os
import pytest
from httpx import AsyncClient
from sqlalchemy.ext.asyncio import AsyncSession
from app.models.tenant import Tenant
from app.core.database import get_db
# Add the project root to PYTHONPATH
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../')))
from app.main import app
@pytest.fixture(scope="function")
async def setup_test_data():
async with get_db() as db:
# Insert a valid tenant
valid_tenant = Tenant(id="valid-tenant-id", slug="valid-tenant", status="active")
await db.add(valid_tenant)
await db.commit()
# Insert an invalid tenant
invalid_tenant = Tenant(id="invalid-tenant-id", slug="invalid-tenant", status="inactive")
await db.add(invalid_tenant)
await db.commit()
yield
# Cleanup
await db.delete(valid_tenant)
await db.delete(invalid_tenant)
await db.commit()
@pytest.mark.asyncio
async def test_request_without_tenant(setup_test_data):
async with AsyncClient(app=app, base_url="http://testserver") as client:
response = await client.get("/v1/categories/")
assert response.status_code == 400
assert response.json()["detail"] == "Tenant information required (X-Tenant-ID or X-Tenant-Slug header)"
@pytest.mark.asyncio
async def test_request_with_invalid_tenant(setup_test_data):
async with AsyncClient(app=app, base_url="http://testserver") as client:
headers = {"X-Tenant-ID": "invalid-tenant-id"}
response = await client.get("/v1/categories/", headers=headers)
assert response.status_code == 404
assert response.json()["detail"] == "Tenant not found or inactive"
@pytest.mark.asyncio
async def test_request_with_valid_tenant(setup_test_data):
async with AsyncClient(app=app, base_url="http://testserver") as client:
headers = {"X-Tenant-ID": "valid-tenant-id"}
response = await client.get("/v1/categories/", headers=headers)
assert response.status_code == 200