Created unit tests for priorities.py router
All checks were successful
AWS Deploy on Push / build (push) Successful in 1m6s

This commit is contained in:
2025-05-28 22:31:31 -05:00
parent 7e25ec6755
commit bf6f156fec
2 changed files with 191 additions and 0 deletions

View File

@@ -0,0 +1,188 @@
import pytest
from fastapi import status
from sqlalchemy.orm import Session
from app.models.db import ChannelURL, Priority
from app.routers.priorities import router as priorities_router
# Import fixtures and mocks
from tests.utils.auth_test_fixtures import (
admin_user_client,
db_session,
non_admin_user_client,
)
from tests.utils.db_mocks import MockChannelDB, MockChannelURL, MockPriority
# --- Test Cases For Priority Creation ---
def test_create_priority_success(db_session: Session, admin_user_client):
priority_data = {"id": 100, "description": "Test Priority"}
response = admin_user_client.post("/priorities/", json=priority_data)
assert response.status_code == status.HTTP_201_CREATED
data = response.json()
assert data["id"] == 100
assert data["description"] == "Test Priority"
# Verify in DB
db_priority = db_session.get(MockPriority, 100)
assert db_priority is not None
assert db_priority.description == "Test Priority"
def test_create_priority_duplicate(db_session: Session, admin_user_client):
# Create initial priority
priority_data = {"id": 100, "description": "Original Priority"}
response1 = admin_user_client.post("/priorities/", json=priority_data)
assert response1.status_code == status.HTTP_201_CREATED
# Attempt to create with same ID
response2 = admin_user_client.post("/priorities/", json=priority_data)
assert response2.status_code == status.HTTP_409_CONFLICT
assert "already exists" in response2.json()["detail"]
def test_create_priority_forbidden_for_non_admin(
db_session: Session, non_admin_user_client
):
priority_data = {"id": 100, "description": "Test Priority"}
response = non_admin_user_client.post("/priorities/", json=priority_data)
assert response.status_code == status.HTTP_403_FORBIDDEN
assert "required roles" in response.json()["detail"]
# --- Test Cases For List Priorities ---
def test_list_priorities_empty(db_session: Session, admin_user_client):
response = admin_user_client.get("/priorities/")
assert response.status_code == status.HTTP_200_OK
assert response.json() == []
def test_list_priorities_with_data(db_session: Session, admin_user_client):
# Create some test priorities
priorities = [
MockPriority(id=100, description="High"),
MockPriority(id=200, description="Medium"),
MockPriority(id=300, description="Low"),
]
for priority in priorities:
db_session.add(priority)
db_session.commit()
response = admin_user_client.get("/priorities/")
assert response.status_code == status.HTTP_200_OK
data = response.json()
assert len(data) == 3
assert data[0]["id"] == 100
assert data[0]["description"] == "High"
assert data[1]["id"] == 200
assert data[1]["description"] == "Medium"
assert data[2]["id"] == 300
assert data[2]["description"] == "Low"
def test_list_priorities_forbidden_for_non_admin(
db_session: Session, non_admin_user_client
):
response = non_admin_user_client.get("/priorities/")
assert response.status_code == status.HTTP_403_FORBIDDEN
assert "required roles" in response.json()["detail"]
# --- Test Cases For Get Priority ---
def test_get_priority_success(db_session: Session, admin_user_client):
# Create a test priority
priority = MockPriority(id=100, description="Test Priority")
db_session.add(priority)
db_session.commit()
response = admin_user_client.get("/priorities/100")
assert response.status_code == status.HTTP_200_OK
data = response.json()
assert data["id"] == 100
assert data["description"] == "Test Priority"
def test_get_priority_not_found(db_session: Session, admin_user_client):
response = admin_user_client.get("/priorities/999")
assert response.status_code == status.HTTP_404_NOT_FOUND
assert "Priority not found" in response.json()["detail"]
def test_get_priority_forbidden_for_non_admin(
db_session: Session, non_admin_user_client
):
response = non_admin_user_client.get("/priorities/100")
assert response.status_code == status.HTTP_403_FORBIDDEN
assert "required roles" in response.json()["detail"]
# --- Test Cases For Delete Priority ---
def test_delete_priority_success(db_session: Session, admin_user_client):
# Create a test priority
priority = MockPriority(id=100, description="To Delete")
db_session.add(priority)
db_session.commit()
response = admin_user_client.delete("/priorities/100")
assert response.status_code == status.HTTP_204_NO_CONTENT
# Verify priority is gone from DB
db_priority = db_session.get(MockPriority, 100)
assert db_priority is None
def test_delete_priority_not_found(db_session: Session, admin_user_client):
response = admin_user_client.delete("/priorities/999")
assert response.status_code == status.HTTP_404_NOT_FOUND
assert "Priority not found" in response.json()["detail"]
def test_delete_priority_in_use(db_session: Session, admin_user_client):
# Create a priority and a channel URL using it
priority = MockPriority(id=100, description="In Use")
db_session.add(priority)
db_session.commit()
# Create a channel first
channel = MockChannelDB(
name="Test Channel",
tvg_id="test.tv",
tvg_name="Test",
tvg_logo="test.png",
group_title="Test Group",
)
db_session.add(channel)
db_session.commit()
# Create URL associated with the channel and priority
channel_url = MockChannelURL(
url="http://test.com",
priority_id=100,
in_use=True,
channel_id=channel.id, # Add the channel_id
)
db_session.add(channel_url)
db_session.commit()
response = admin_user_client.delete("/priorities/100")
assert response.status_code == status.HTTP_409_CONFLICT
assert "in use by channel URLs" in response.json()["detail"]
# Verify priority still exists
db_priority = db_session.get(MockPriority, 100)
assert db_priority is not None
def test_delete_priority_forbidden_for_non_admin(
db_session: Session, non_admin_user_client
):
response = non_admin_user_client.delete("/priorities/100")
assert response.status_code == status.HTTP_403_FORBIDDEN
assert "required roles" in response.json()["detail"]

View File

@@ -6,6 +6,7 @@ from sqlalchemy.orm import Session
from app.auth.dependencies import get_current_user
from app.models.auth import CognitoUser
from app.routers.channels import router as channels_router
from app.routers.priorities import router as priorities_router
from app.utils.database import get_db
from tests.utils.db_mocks import (
MockBase,
@@ -56,6 +57,7 @@ def admin_user_client(db_session: Session):
"""Yields a TestClient configured with an admin user."""
test_app = FastAPI()
test_app.include_router(channels_router)
test_app.include_router(priorities_router)
test_app.dependency_overrides[get_db] = mock_get_db
test_app.dependency_overrides[get_current_user] = mock_get_current_user_admin
with TestClient(test_app) as test_client:
@@ -67,6 +69,7 @@ def non_admin_user_client(db_session: Session):
"""Yields a TestClient configured with a non-admin user."""
test_app = FastAPI()
test_app.include_router(channels_router)
test_app.include_router(priorities_router)
test_app.dependency_overrides[get_db] = mock_get_db
test_app.dependency_overrides[get_current_user] = mock_get_current_user_non_admin
with TestClient(test_app) as test_client: