major: added initial version

This commit is contained in:
2024-10-25 13:40:27 +02:00
parent ad22ed1ee2
commit 085c34a4c7
11 changed files with 351 additions and 18 deletions

0
app/__init__.py Normal file
View File

55
app/main.py Normal file
View File

@@ -0,0 +1,55 @@
import os
from fastapi import APIRouter
from fastapi import Response
from creyPY.fastapi.app import generate_unique_id
from dotenv import load_dotenv
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
load_dotenv()
ENV = os.getenv("ENV", "local").lower()
VERSION = os.getenv("VERSION", "Alpha")
# App Setup
app = FastAPI(
title="ServerCrow Pong API",
description="A really simple FastAPI service to return the request with code and content specified in the parameters. No logging, no nothing.",
version=VERSION,
docs_url="/",
redoc_url=None,
debug=ENV != "prod",
swagger_ui_parameters={
"docExpansion": "list",
"displayOperationId": True,
"defaultModelsExpandDepth": 5,
"defaultModelExpandDepth": 5,
"filter": True,
"displayRequestDuration": True,
"defaultModelRendering": "model",
"persistAuthorization": True,
},
generate_unique_id_function=generate_unique_id,
)
# CORS Setup
origins = ["http://localhost:5173", "https://pong.servercrow.com"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# App Routers
router = APIRouter(prefix="/pong", tags=["public"])
@router.get("/", operation_id="get_pong")
async def get_status(code: int, response_text: str = "OK") -> Response:
"""Get the ping to your pong. Returns the code that is specified and a response if provided."""
return Response(status_code=code, content=response_text)
app.include_router(router)

42
app/test_main.py Normal file
View File

@@ -0,0 +1,42 @@
from creyPY.fastapi.testing import GenericClient
from .main import app
class TestAPI:
def setup_class(self):
self.c = GenericClient(app)
def test_swagger_gen(self):
re = self.c.get("/openapi.json")
assert re["info"]["title"] == "ServerCrow Pong API"
def test_health_check(self):
self.c.get("/", parse_json=False)
def test_get_pong(self):
re = self.c.get("/pong/?code=200&response_text=OK", parse_json=False)
assert re == b"OK"
def test_get_pong_404(self):
re = self.c.get("/pong/?code=404&response_text=Not Found", parse_json=False, r_code=404)
assert re == b"Not Found"
def test_get_pong_503(self):
re = self.c.get(
"/pong/?code=503&response_text=Service Unavailable", parse_json=False, r_code=503
)
assert re == b"Service Unavailable"
def test_get_pong_500(self):
re = self.c.get(
"/pong/?code=500&response_text=Internal Server Error", parse_json=False, r_code=500
)
assert re == b"Internal Server Error"
def test_get_pong_400(self):
re = self.c.get("/pong/?code=400&response_text=Bad Request", parse_json=False, r_code=400)
assert re == b"Bad Request"
def test_get_pong_401(self):
re = self.c.get("/pong/?code=401&response_text=Unauthorized", parse_json=False, r_code=401)
assert re == b"Unauthorized"