162 lines
5.6 KiB
Python
162 lines
5.6 KiB
Python
# SPDX-FileCopyrightText: 2023 Marlon W (Mawoka)
|
|
#
|
|
# SPDX-License-Identifier: MPL-2.0
|
|
|
|
|
|
from typing import Generator
|
|
from fastapi.testclient import TestClient
|
|
|
|
# from classquiz.socket_server import sio
|
|
from classquiz import app as fastapi_app
|
|
|
|
# from typing import List, Optional
|
|
|
|
# stdlib imports
|
|
# import asyncio
|
|
|
|
# 3rd party imports
|
|
import pytest
|
|
|
|
# import socketio
|
|
# import uvicorn
|
|
|
|
# FastAPI imports
|
|
# from fastapi import FastAPI
|
|
|
|
PORT = 8000
|
|
|
|
|
|
class ValueStorage:
|
|
quiz_id = None
|
|
imported_quizzes = []
|
|
game_pin = None
|
|
game_id = None
|
|
exported_quiz_data = None
|
|
edit_id = None
|
|
image_id = None
|
|
cookies = None
|
|
file_id = None
|
|
quiztivity_id = None
|
|
share_id = None
|
|
expired_share_id = None
|
|
|
|
|
|
example_quiz = {
|
|
"public": True,
|
|
"title": "Some test question",
|
|
"description": "A description",
|
|
"questions": [
|
|
{
|
|
"type": "ABCD",
|
|
"question": "Is ClassQuiz cool?",
|
|
"time": 10,
|
|
"answers": [{"right": True, "answer": "Yes"}, {"right": False, "answer": "No"}],
|
|
},
|
|
{
|
|
"type": "ABCD",
|
|
"question": "Do you like open source?",
|
|
"time": 5,
|
|
"image": None,
|
|
"answers": [
|
|
{"right": True, "answer": "Yes"},
|
|
{"right": False, "answer": "No"},
|
|
{"right": False, "answer": "Maybe"},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
test_user_email = "sth@byom.de"
|
|
test_user_password = "test"
|
|
|
|
example_quiztivity = {
|
|
"title": "Some test Quiztivity",
|
|
"pages": [
|
|
{
|
|
"title": "Some test question",
|
|
"type": "ABCD",
|
|
"data": {
|
|
"question": "Is ClassQuiz cool?",
|
|
"answers": [{"correct": True, "answer": "Yes"}, {"correct": False, "answer": "No"}],
|
|
},
|
|
}
|
|
],
|
|
}
|
|
|
|
# mock_test_results = {'0': [{'username': 'Player 1', 'answer': 'Byte, Bit, KB, MB, GB, TB', 'right': False},
|
|
# {'username': 'Player 2', 'answer': 'Byte, Bit, KB, MB, GB, TB', 'right': False}, {'username': 'Player 3',
|
|
# 'answer': 'Bit, Byte, KB, MB, GB, TB', 'right': True}], '1': [{'username': 'Player 3', 'answer': 'CPU',
|
|
# 'right': True}, {'username': 'Player 2', 'answer': 'CPU', 'right': True}, {'username': 'Player 1',
|
|
# 'answer': 'CPU', 'right': True}], '2': [{'username': 'Player 1', 'answer': 'Peripheriegeräte',
|
|
# 'right': True}, {'username': 'Player 2', 'answer': 'Speichergeräte', 'right': False},
|
|
# {'username': 'Player 3', 'answer': 'Kommunikationsgeräte', 'right': False}], '3': [{'username': 'Player 1',
|
|
# 'answer': 'die Taktfrequenz der CPU', 'right': True}, {'username': 'Player 2',
|
|
# 'answer': 'die Taktfrequenz der CPU', 'right': True}, {'username': 'Player 3',
|
|
# 'answer': 'die Taktfrequenz der CPU', 'right': True}], '4': [{'username': 'Player 3', 'answer': 'Drucker',
|
|
# 'right': True}, {'username': 'Player 2', 'answer': 'Drucker', 'right': True}, {'username': 'Player 1',
|
|
# 'answer': 'Tabellenkalkulation', 'right': False}], '5': [{'username': 'Player 1',
|
|
# 'answer':'CPU (Central Processing Unit)', 'right': False}, {'username': 'Player 2',
|
|
# 'answer': 'RAM (Random Access Memory)', 'right': True}, {'username': 'Player 3',
|
|
# 'answer': 'RAM (Random Access Memory)', 'right': True}], '6': [{'username': 'Player 3', 'answer': 'RAM',
|
|
# 'right': True}, {'username': 'Player 2', 'answer': 'ROM', 'right': False}, {'username': 'Player 1',
|
|
# 'answer': 'RAM', 'right': True}], '7': [{'username': 'Player 1', 'answer': '1 TB (Terabyte)',
|
|
# 'right': True}, {'username': 'Player 2', 'answer': '500 KB (Kilobyte)', 'right': False},
|
|
# {'username': 'Player 3', 'answer': '500 TB (Terabyte)', 'right': False}], '8': [{'username': 'Player 3',
|
|
# 'answer': 'Tabellenkalkulationsprogramm', 'right': True}, {'username': 'Player 2',
|
|
# 'answer': 'Tabellenkalkulationsprogramm', 'right': True}, {'username': 'Player 1', 'answer': 'Linux',
|
|
# 'right': False}], '9': [{'username': 'Player 1', 'answer': 'Anwendungsprogramme', 'right': True},
|
|
# {'username': 'Player 2', 'answer': 'Lernprogramme', 'right': False}, {'username': 'Player 3',
|
|
# 'answer': 'Anwendungsprogramme', 'right': True}]}
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def test_client() -> Generator:
|
|
with TestClient(fastapi_app) as testclient:
|
|
yield testclient
|
|
|
|
|
|
#
|
|
# sio.eio.start_service_task = False
|
|
#
|
|
#
|
|
# class UvicornTestServer(uvicorn.Server):
|
|
# """Uvicorn test server
|
|
#
|
|
# Usage:
|
|
# @pytest.fixture
|
|
# async def start_stop_server():
|
|
# server = UvicornTestServer()
|
|
# await server.up()
|
|
# yield
|
|
# await server.down()
|
|
# """
|
|
#
|
|
# def __init__(self, app: FastAPI = fastapi_app, host: str = '127.0.0.1', port: int = PORT):
|
|
# """Create a Uvicorn test server
|
|
#
|
|
# Args:
|
|
# app (FastAPI, optional): the FastAPI app. Defaults to main.app.
|
|
# host (str, optional): the host ip. Defaults to '127.0.0.1'.
|
|
# port (int, optional): the port. Defaults to PORT.
|
|
# """
|
|
# self._startup_done = asyncio.Event()
|
|
# super().__init__(config=uvicorn.Config(app, host=host, port=port))
|
|
#
|
|
# async def startup(self, sockets: Optional[List] = None) -> None:
|
|
# """Override uvicorn startup"""
|
|
# await super().startup(sockets=sockets)
|
|
# self.config.setup_event_loop()
|
|
# self._startup_done.set()
|
|
#
|
|
# async def up(self) -> None:
|
|
# """Start up server asynchronously"""
|
|
# self._serve_task = asyncio.create_task(self.serve())
|
|
# await self._startup_done.wait()
|
|
#
|
|
# async def down(self) -> None:
|
|
# """Shut down server asynchronously"""
|
|
# self.should_exit = True
|
|
# await self._serve_task
|
|
#
|
|
#
|
|
#
|