import bcrypt from unittest.mock import patch, MagicMock from src.utils.auth import verify_password, get_user, authenticate def make_mock_supabase(user_data): mock_response = MagicMock() mock_response.data = user_data mock_query = MagicMock() mock_query.select.return_value = mock_query mock_query.eq.return_value = mock_query mock_query.execute.return_value = mock_response mock_client = MagicMock() mock_client.table.return_value = mock_query return mock_client def make_user(role="client", password="secret"): hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode() return {"id": 1, "username": "testuser", "password_hash": hashed, "role": role} # --- verify_password --- def test_verify_password_correct(): user = make_user(password="monmotdepasse") assert verify_password("monmotdepasse", user["password_hash"]) is True def test_verify_password_incorrect(): user = make_user(password="correct") assert verify_password("mauvais", user["password_hash"]) is False def test_verify_password_sensible_a_la_casse(): user = make_user(password="Secret") assert verify_password("secret", user["password_hash"]) is False # --- get_user --- def test_get_user_retourne_utilisateur_si_trouve(): user = make_user() mock_client = make_mock_supabase([user]) with patch("src.utils.auth.get_client", return_value=mock_client): result = get_user("testuser") assert result == user def test_get_user_retourne_none_si_non_trouve(): mock_client = make_mock_supabase([]) with patch("src.utils.auth.get_client", return_value=mock_client): result = get_user("inconnu") assert result is None def test_get_user_interroge_la_bonne_table(): mock_client = make_mock_supabase([]) with patch("src.utils.auth.get_client", return_value=mock_client): get_user("testuser") mock_client.table.assert_called_once_with("users") # --- authenticate --- def test_authenticate_succes_client(): user = make_user(role="client", password="mdpclient") mock_client = make_mock_supabase([user]) with patch("src.utils.auth.get_client", return_value=mock_client): result = authenticate("testuser", "mdpclient") assert result == user def test_authenticate_succes_administrateur(): user = make_user(role="administrateur", password="mdpadmin") mock_client = make_mock_supabase([user]) with patch("src.utils.auth.get_client", return_value=mock_client): result = authenticate("testuser", "mdpadmin") assert result["role"] == "administrateur" def test_authenticate_echec_mauvais_mot_de_passe(): user = make_user(password="correct") mock_client = make_mock_supabase([user]) with patch("src.utils.auth.get_client", return_value=mock_client): result = authenticate("testuser", "mauvais") assert result is None def test_authenticate_echec_utilisateur_inconnu(): mock_client = make_mock_supabase([]) with patch("src.utils.auth.get_client", return_value=mock_client): result = authenticate("inconnu", "quelconque") assert result is None