Added pytest configuration and first 4 unit tests
All checks were successful
AWS Deploy on Push / build (push) Successful in 1m4s

This commit is contained in:
2025-05-27 17:37:05 -05:00
parent 4b1a7e9bea
commit cebbb9c1a8
14 changed files with 205 additions and 15 deletions

View File

@@ -1,9 +1,19 @@
from fastapi.concurrency import asynccontextmanager
from app.routers import channels, auth, playlist, priorities
from fastapi import FastAPI
from fastapi.openapi.utils import get_openapi
from app.utils.database import init_db
@asynccontextmanager
async def lifespan(app: FastAPI):
# Initialize database tables on startup
init_db()
yield
app = FastAPI(
lifespan=lifespan,
title="IPTV Updater API",
description="API for IPTV Updater service",
version="1.0.0",

View File

@@ -2,7 +2,7 @@ from datetime import datetime, timezone
import uuid
from sqlalchemy import Column, String, JSON, DateTime, UniqueConstraint, ForeignKey, Boolean, Integer
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()

View File

@@ -1,15 +1,14 @@
from datetime import datetime
from typing import List, Optional
from uuid import UUID
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, ConfigDict
class PriorityBase(BaseModel):
"""Base Pydantic model for priorities"""
id: int
description: str
class Config:
from_attributes = True
model_config = ConfigDict(from_attributes=True)
class PriorityCreate(PriorityBase):
"""Pydantic model for creating priorities"""
@@ -32,8 +31,7 @@ class ChannelURLBase(ChannelURLCreate):
updated_at: datetime
priority_id: int
class Config:
from_attributes = True
model_config = ConfigDict(from_attributes=True)
class ChannelURLResponse(ChannelURLBase):
"""Pydantic model for channel URL responses"""
@@ -74,5 +72,4 @@ class ChannelResponse(BaseModel):
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
model_config = ConfigDict(from_attributes=True)

View File

@@ -1,12 +1,12 @@
import os
import boto3
from app.models import Base
from .constants import AWS_REGION
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from functools import lru_cache
@lru_cache(maxsize=1)
def get_db_credentials():
"""Fetch and cache DB credentials from environment or SSM Parameter Store"""
if os.getenv("MOCK_AUTH", "").lower() == "true":
@@ -25,14 +25,14 @@ def get_db_credentials():
except Exception as e:
raise RuntimeError(f"Failed to fetch DB credentials from SSM: {str(e)}")
# Initialize engine and session maker
engine = create_engine(get_db_credentials())
# Create all tables
from app.models import Base
Base.metadata.create_all(bind=engine)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def init_db():
"""Initialize database by creating all tables"""
Base.metadata.create_all(bind=engine)
def get_db():
"""Dependency for getting database session"""
db = SessionLocal()