first comit
This commit is contained in:
119
tests/test_app.py
Normal file
119
tests/test_app.py
Normal file
@@ -0,0 +1,119 @@
|
||||
import pytest
|
||||
from flask import Flask
|
||||
from flask.testing import FlaskClient
|
||||
|
||||
# Redémarrer PyCharm si non reconnu. File > Invalidate Caches > "Just restart"
|
||||
from app import create_app
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def app() -> Flask:
|
||||
"""Fixture pour créer une instance de l'app pour les tests."""
|
||||
app = create_app()
|
||||
app.config.update({"TESTING": True})
|
||||
yield app
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def client(app: Flask) -> FlaskClient:
|
||||
"""Fixture pour obtenir un client de test."""
|
||||
return app.test_client()
|
||||
|
||||
|
||||
def test_gallery_page_loads(client: FlaskClient) -> None:
|
||||
"""Teste si la page principale se charge correctement (cas nominal)."""
|
||||
|
||||
# On effectue la requête
|
||||
response = client.get('/')
|
||||
# 1. On vérifie que le statut est bien 200 OK
|
||||
assert response.status_code == 200
|
||||
# 2. On vérifie que le contenu HTML est bien celui attendu
|
||||
assert b"Galerie" in response.data
|
||||
|
||||
|
||||
def test_404_error_page(client: FlaskClient) -> None:
|
||||
"""Teste que le gestionnaire d'erreur 404 personnalisé est bien appelé."""
|
||||
|
||||
# On effectue la requête
|
||||
response = client.get('/cette-page-n-existe-pas')
|
||||
# 1. On vérifie que le statut est bien 200 OK
|
||||
assert response.status_code == 404
|
||||
# 2. On vérifie que le contenu HTML est bien celui attendu
|
||||
assert b"Erreur 404" in response.data
|
||||
|
||||
|
||||
def test_gallery_robustness_when_folder_is_missing(client: FlaskClient, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""Teste la robustesse de la vue si le dossier d'images est manquant."""
|
||||
|
||||
# On simule que la méthode is_dir() de pathlib.Path retourne False
|
||||
# C'est ce qui se passe si le dossier n'existe pas.
|
||||
def mock_is_dir(path_object):
|
||||
return False
|
||||
|
||||
# On remplace la vraie fonction par notre simulation pour ce test
|
||||
monkeypatch.setattr('pathlib.Path.is_dir', mock_is_dir)
|
||||
|
||||
# On effectue la requête
|
||||
response = client.get('/')
|
||||
|
||||
# 1. On vérifie que le statut est bien 200 OK
|
||||
assert response.status_code == 200
|
||||
# 2. On vérifie que le contenu retourné est bien celui attendu
|
||||
assert b"Aucune image" in response.data
|
||||
|
||||
|
||||
def test_api_images_not_found(client: FlaskClient, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""
|
||||
Teste le cas où aucune image n'est trouvée.
|
||||
L'API doit retourner une erreur 404 avec un message JSON.
|
||||
"""
|
||||
# On utilise monkeypatch pour "simuler" le comportement de build_image_structure.
|
||||
# On lui fait retourner un dictionnaire vide, comme si aucune image n'avait été trouvée.
|
||||
def mock_build_structure(path):
|
||||
return {}
|
||||
|
||||
# On remplace la vraie fonction par notre simulation pour ce test
|
||||
monkeypatch.setattr('app.views.build_image_structure', mock_build_structure)
|
||||
|
||||
# On effectue la requête
|
||||
response = client.get('/api/images')
|
||||
|
||||
# 1. On vérifie que le statut est bien 404 Not Found
|
||||
assert response.status_code == 404
|
||||
assert response.content_type == 'application/json'
|
||||
|
||||
# 2. On vérifie que le message d'erreur est correct dans le JSON
|
||||
data = response.get_json()
|
||||
assert data['error'] == "Aucune image n'a été trouvée"
|
||||
|
||||
|
||||
def test_api_images_server_error(client: FlaskClient, monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""
|
||||
Teste le cas où une erreur inattendue se produit lors du traitement.
|
||||
L'API doit retourner une erreur 500 avec un message JSON.
|
||||
"""
|
||||
# On simule maintenant une exception inattendue lors de l'appel à la fonction.
|
||||
def mock_raise_exception(path):
|
||||
raise ValueError("Erreur de simulation")
|
||||
|
||||
# On remplace la vraie fonction par notre simulation qui lève une erreur
|
||||
monkeypatch.setattr('app.views.build_image_structure', mock_raise_exception)
|
||||
|
||||
# On effectue la requête
|
||||
response = client.get('/api/images')
|
||||
|
||||
# 1. On vérifie que le statut est bien 500 Internal Server Error
|
||||
assert response.status_code == 500
|
||||
assert response.content_type == 'application/json'
|
||||
|
||||
# 2. On vérifie que le message d'erreur générique est retourné
|
||||
data = response.get_json()
|
||||
assert data['error'] == "Erreur interne du serveur"
|
||||
|
||||
|
||||
def test_api_images_success(client: FlaskClient) -> None:
|
||||
"""
|
||||
Teste le cas nominal de l'API : les images sont trouvées et retournées.
|
||||
"""
|
||||
# TODO : compléter le test comme décrit dans l'énoncé du TP (étape 5).
|
||||
assert True # Remplacer par le vrai test.
|
||||
Reference in New Issue
Block a user