2024-08-03 10:31:16 +02:00
|
|
|
import validators
|
2024-08-01 14:31:17 +02:00
|
|
|
from fastapi.testclient import TestClient
|
2024-08-01 14:44:24 +02:00
|
|
|
from datetime import date
|
2024-08-13 11:03:17 +02:00
|
|
|
from typing import Union, Dict
|
2024-08-01 14:31:17 +02:00
|
|
|
|
2024-08-02 10:25:48 +02:00
|
|
|
from src.main import app
|
2024-08-02 09:52:06 +02:00
|
|
|
|
2024-08-11 21:52:36 +02:00
|
|
|
from src.classes import boardgame_classes, play_classes, statistic_classes
|
2024-08-01 14:31:17 +02:00
|
|
|
|
|
|
|
|
client = TestClient(app)
|
|
|
|
|
|
2024-08-02 10:54:41 +02:00
|
|
|
def default_boardgame_test(to_test_boardgame: boardgame_classes.BoardGame):
|
|
|
|
|
assert type(to_test_boardgame.id) == int
|
|
|
|
|
assert type(to_test_boardgame.name) == str
|
2024-08-08 17:00:34 +02:00
|
|
|
assert type(to_test_boardgame.weight) == float
|
2024-08-03 10:31:16 +02:00
|
|
|
assert type(to_test_boardgame.description) == str
|
|
|
|
|
assert validators.url(str(to_test_boardgame.image_url))
|
|
|
|
|
assert validators.url(str(to_test_boardgame.thumbnail_url))
|
|
|
|
|
assert type(to_test_boardgame.year_published) == int
|
|
|
|
|
assert type(to_test_boardgame.min_players) == int
|
|
|
|
|
assert type(to_test_boardgame.max_players) == int
|
|
|
|
|
assert type(to_test_boardgame.min_playing_time) == int
|
|
|
|
|
assert type(to_test_boardgame.max_playing_time) == int
|
|
|
|
|
assert type(to_test_boardgame.min_age) == int
|
|
|
|
|
assert type(to_test_boardgame.type) == boardgame_classes.BoardgameType
|
2024-08-02 10:54:41 +02:00
|
|
|
|
|
|
|
|
|
2024-08-13 11:03:17 +02:00
|
|
|
def default_statistic_test(to_test_statistic: statistic_classes.StatisticBase):
|
|
|
|
|
assert type(to_test_statistic.name) == str, to_test_statistic
|
|
|
|
|
|
2024-08-02 10:54:41 +02:00
|
|
|
|
2024-08-01 14:31:17 +02:00
|
|
|
def test_read_main():
|
|
|
|
|
response = client.get("/")
|
|
|
|
|
assert response.status_code == 200
|
2024-08-01 14:41:44 +02:00
|
|
|
assert response.json() == {"Hello": "World"}
|
|
|
|
|
|
|
|
|
|
def test_retrieve_boardgame():
|
2024-08-11 21:27:59 +02:00
|
|
|
response = client.get("/boardgame?id=373167")
|
2024-08-01 14:41:44 +02:00
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
2024-08-13 11:03:17 +02:00
|
|
|
returned_boardgame = boardgame_classes.BoardGame.model_validate(response.json())
|
2024-08-01 14:41:44 +02:00
|
|
|
|
2024-08-02 10:54:41 +02:00
|
|
|
default_boardgame_test(returned_boardgame)
|
2024-08-01 14:41:44 +02:00
|
|
|
|
2024-08-02 10:54:41 +02:00
|
|
|
def test_retrieve_owned():
|
|
|
|
|
response = client.get("/owned")
|
2024-08-01 14:41:44 +02:00
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
2024-08-13 11:03:17 +02:00
|
|
|
returned_boardgame = boardgame_classes.OwnedBoardGame.model_validate(response.json()[0])
|
2024-08-01 14:41:44 +02:00
|
|
|
|
2024-08-02 10:54:41 +02:00
|
|
|
default_boardgame_test(returned_boardgame)
|
2024-08-01 14:44:24 +02:00
|
|
|
assert type(returned_boardgame.price_paid) == float
|
|
|
|
|
assert type(returned_boardgame.acquisition_date) == date
|
2024-08-02 10:54:41 +02:00
|
|
|
assert type(returned_boardgame.acquired_from) == str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_retrieve_wishlist():
|
|
|
|
|
response = client.get("/wishlist")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
2024-08-13 11:03:17 +02:00
|
|
|
returned_boardgame = boardgame_classes.WishlistBoardGame.model_validate(response.json()[0])
|
2024-08-02 10:54:41 +02:00
|
|
|
|
|
|
|
|
default_boardgame_test(returned_boardgame)
|
|
|
|
|
assert type(returned_boardgame.wishlist_priority) == int
|
2024-08-03 10:31:16 +02:00
|
|
|
assert returned_boardgame.wishlist_priority > 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_retrieve_plays():
|
|
|
|
|
response = client.get("/plays")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
2024-08-12 12:08:08 +02:00
|
|
|
returned_play = play_classes.PlayPublicWithPlayers.model_validate(response.json()[0])
|
2024-08-03 10:31:16 +02:00
|
|
|
|
|
|
|
|
assert type(returned_play.boardgame_id) == int
|
|
|
|
|
assert type(returned_play.play_date) == date
|
|
|
|
|
assert type(returned_play.duration) == int
|
|
|
|
|
assert type(returned_play.ignore_for_stats) == bool
|
2024-08-11 21:50:16 +02:00
|
|
|
assert type(returned_play.location) == str
|
|
|
|
|
|
|
|
|
|
def test_retrieve_players():
|
|
|
|
|
response = client.get("/players?play_id=1")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
2024-08-12 20:35:12 +02:00
|
|
|
returned_player = play_classes.PlayPlayerPublic.model_validate(response.json()[0])
|
2024-08-11 21:50:16 +02:00
|
|
|
|
|
|
|
|
assert type(returned_player.name) == str
|
|
|
|
|
assert type(returned_player.username) == str
|
|
|
|
|
assert type(returned_player.score) == float or returned_player.score == None
|
|
|
|
|
assert type(returned_player.first_play) == bool
|
|
|
|
|
assert type(returned_player.has_won) == bool
|
2024-08-11 21:52:36 +02:00
|
|
|
assert type(returned_player.play_id) == int
|
|
|
|
|
|
|
|
|
|
def test_retrieve_basic_statistic():
|
|
|
|
|
response = client.get("/statistics/amount_of_games")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
2024-08-13 11:03:17 +02:00
|
|
|
returned_statistic = statistic_classes.NumberStatistic.model_validate(response.json())
|
|
|
|
|
|
|
|
|
|
default_statistic_test(returned_statistic)
|
|
|
|
|
assert type(returned_statistic.result) == float
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_retrieve_timeline_statistic():
|
|
|
|
|
response = client.get("/statistics/amount_of_games_over_time")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
|
|
returned_statistic = statistic_classes.TimeLineStatistic.model_validate(response.json())
|
|
|
|
|
|
|
|
|
|
default_statistic_test(returned_statistic)
|
|
|
|
|
assert type(returned_statistic.result) == dict
|
|
|
|
|
|
|
|
|
|
response = client.get("/statistics/games_played_per_year")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
|
|
returned_statistic = statistic_classes.TimeLineStatistic.model_validate(response.json())
|
|
|
|
|
|
|
|
|
|
default_statistic_test(returned_statistic)
|
|
|
|
|
assert type(returned_statistic.result) == dict
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_retrieve_game_order_statistic():
|
|
|
|
|
response = client.get("/statistics/most_expensive_games")
|
|
|
|
|
assert response.status_code == 200
|
|
|
|
|
|
|
|
|
|
returned_statistic = statistic_classes.GameOrderStatistic.model_validate(response.json())
|
2024-08-11 21:52:36 +02:00
|
|
|
|
2024-08-13 11:03:17 +02:00
|
|
|
default_statistic_test(returned_statistic)
|
|
|
|
|
assert type(returned_statistic.result) == list
|
|
|
|
|
assert type(returned_statistic.result[0]) in [
|
|
|
|
|
boardgame_classes.BoardGame, boardgame_classes.BoardGameExpansion,
|
|
|
|
|
boardgame_classes.OwnedBoardGame, boardgame_classes.OwnedBoardGameExpansion,
|
|
|
|
|
boardgame_classes.WishlistBoardGame, boardgame_classes.WishlistBoardGameExpansion]
|