added main-controller tests

This commit is contained in:
Lucas Jensen
2024-05-03 21:17:04 -07:00
parent a7f7b0bd48
commit f5f507b20a
11 changed files with 240 additions and 27 deletions

View File

@@ -3,6 +3,12 @@ from fastapi.security import HTTPAuthorizationCredentials
from icecream import ic
from app.admin import oauth_token
from app.controllers import (
event_controller,
group_controller,
musicians_controller,
user_controller,
)
from app.controllers.events import EventController
from app.controllers.group import GroupController
from app.controllers.musicians import MusicianController
@@ -22,19 +28,29 @@ class MainController:
All methods are asynchronous to facilitate asynchronous calls from the Router layer.
token-based authentication is handled here as needed per the nature of the data being accessed.
Testing: pass mocked sub-controllers to the constructor.
"""
def __init__(self) -> None:
self.event_controller = EventController()
self.musician_controller = MusicianController()
self.user_controller = UserController()
self.group_controller = GroupController()
def __init__(
self,
event_controller=event_controller,
musicians_controller=musicians_controller,
user_controller=user_controller,
group_controller=group_controller,
oauth_token=oauth_token,
) -> None:
self.event_controller = event_controller
self.musician_controller = musicians_controller
self.user_controller = user_controller
self.group_controller = group_controller
self.oauth_token = oauth_token
async def get_musicians(self) -> list[Musician]:
return self.musician_controller.get_musicians()
async def get_musician(self, id: int) -> Musician:
return self.musician_controller.get_musician(id)
async def get_musician(self, musician_id: int) -> Musician:
return self.musician_controller.get_musician(musician_id)
async def update_musician(
self,
@@ -49,7 +65,7 @@ class MainController:
status_code=status.HTTP_400_BAD_REQUEST,
detail="ID in URL does not match ID in request body",
)
_, sub = oauth_token.email_and_sub(token)
_, sub = self.oauth_token.email_and_sub(token)
self.user_controller.get_user_by_sub(sub)
return self.musician_controller.update_musician(
musician_id=musician.id,
@@ -60,42 +76,54 @@ class MainController:
async def get_events(self) -> list[EventSeries]:
return self.event_controller.get_all_series()
async def get_event(self, id: int) -> EventSeries:
return self.event_controller.get_one_series_by_id(id)
async def get_event(self, series_id: int) -> EventSeries:
return self.event_controller.get_one_series_by_id(series_id)
async def create_event(
self, series: NewEventSeries, token: HTTPAuthorizationCredentials
) -> EventSeries:
_, sub = oauth_token.email_and_sub(token)
_, sub = self.oauth_token.email_and_sub(token)
self.user_controller.get_user_by_sub(sub)
return self.event_controller.create_series(series)
async def add_series_poster(
self, series_id: int, poster: UploadFile, token: HTTPAuthorizationCredentials
) -> EventSeries:
_, sub = oauth_token.email_and_sub(token)
_, sub = self.oauth_token.email_and_sub(token)
self.user_controller.get_user_by_sub(sub)
return self.event_controller.add_series_poster(series_id, poster)
async def delete_series(self, id: int, token: HTTPAuthorizationCredentials) -> None:
_, sub = oauth_token.email_and_sub(token)
async def delete_series(
self, series_id: int, token: HTTPAuthorizationCredentials
) -> None:
_, sub = self.oauth_token.email_and_sub(token)
self.user_controller.get_user_by_sub(sub)
self.event_controller.delete_series(id)
self.event_controller.delete_series(series_id)
async def update_series(
self, route_id: int, series: EventSeries, token: HTTPAuthorizationCredentials
) -> EventSeries:
_, sub = oauth_token.email_and_sub(token)
_, sub = self.oauth_token.email_and_sub(token)
self.user_controller.get_user_by_sub(sub)
return self.event_controller.update_series(route_id, series)
async def get_users(self) -> list[User]:
return self.user_controller.get_users()
async def get_user(self, id: int) -> User:
return self.user_controller.get_user_by_id(id)
async def get_user(self, user_id: int) -> User:
return self.user_controller.get_user_by_id(user_id)
async def create_user(self, token: HTTPAuthorizationCredentials) -> User:
"""This method does NOT post a user to the database.
Instead, it retrieves the user's information from the OAuth token,
updates the user's sub in the db if needed, and returns the user object.
Args:
token (HTTPAuthorizationCredentials): The OAuth token
Returns:
User: The User object
"""
return self.user_controller.create_user(token)
async def get_group(self) -> Group:
@@ -104,6 +132,6 @@ class MainController:
async def update_group_bio(
self, bio: str, token: HTTPAuthorizationCredentials
) -> Group:
_, sub = oauth_token.email_and_sub(token)
_, sub = self.oauth_token.email_and_sub(token)
self.user_controller.get_user_by_sub(sub)
return self.group_controller.update_group_bio(bio)