from tp_multiprocessing.process import calculate_new_height
import pytest

# ## Tests des cas de succès et des cas limites ##

@pytest.mark.parametrize("orig_width, orig_height, new_width, expected_height", [
    # Cas 1: Réduction standard (ratio 16:9)
    (1920, 1080, 960, 540),

    # Cas 2: Format portrait
    (800, 1200, 400, 600),

    # Cas 3: Pas de redimensionnement (la nouvelle largeur est identique)
    (1024, 768, 1024, 768),

    # Cas 4: Le calcul du ratio produit un flottant (test de la conversion en int)
    (300, 200, 100, 66),  # 200 * (100/300) = 66.66... -> 66

    # Cas 5: Agrandissement (upscaling)
    (100, 100, 250, 250),

    # Cas 6: Hauteur d'origine nulle
    (1000, 0, 500, 0)
])
def test_calculate_new_height_various_scenarios(orig_width, orig_height, new_width, expected_height):
    """
    Vérifie le calcul de la nouvelle hauteur pour plusieurs scénarios valides.
    """
    assert calculate_new_height(orig_width, orig_height, new_width) == expected_height

# ## Tests des cas d'erreur ##

@pytest.mark.parametrize("invalid_width", [0, -1, -100])
def test_calculate_new_height_with_invalid_width_raises_error(invalid_width):
    """
    Vérifie qu'une ValueError est levée si la largeur d'origine est nulle ou négative.
    """
    # Le contexte `pytest.raises` vérifie qu'une exception est bien levée.
    # L'argument `match` vérifie que le message d'erreur contient le texte attendu.
    with pytest.raises(ValueError, match="La largeur d'origine doit être positive"):
        calculate_new_height(invalid_width, 1080, 500)
