test_login.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. from unittest.mock import patch
  2. from app.core.config import settings
  3. from apps.utils import generate_password_reset_token
  4. from fastapi.testclient import TestClient
  5. def test_get_access_token(client: TestClient) -> None:
  6. login_data = {
  7. "username": settings.FIRST_SUPERUSER,
  8. "password": settings.FIRST_SUPERUSER_PASSWORD,
  9. }
  10. r = client.post(f"{settings.API_V1_STR}/login/access-token", data=login_data)
  11. tokens = r.json()
  12. assert r.status_code == 200
  13. assert "access_token" in tokens
  14. assert tokens["access_token"]
  15. def test_get_access_token_incorrect_password(client: TestClient) -> None:
  16. login_data = {
  17. "username": settings.FIRST_SUPERUSER,
  18. "password": "incorrect",
  19. }
  20. r = client.post(f"{settings.API_V1_STR}/login/access-token", data=login_data)
  21. assert r.status_code == 400
  22. def test_use_access_token(
  23. client: TestClient, superuser_token_headers: dict[str, str]
  24. ) -> None:
  25. r = client.post(
  26. f"{settings.API_V1_STR}/login/test-token",
  27. headers=superuser_token_headers,
  28. )
  29. result = r.json()
  30. assert r.status_code == 200
  31. assert "email" in result
  32. def test_recovery_password(
  33. client: TestClient, normal_user_token_headers: dict[str, str]
  34. ) -> None:
  35. with patch("app.core.config.settings.SMTP_HOST", "smtp.example.com"), patch(
  36. "app.core.config.settings.SMTP_USER", "admin@example.com"
  37. ):
  38. email = "test@example.com"
  39. r = client.post(
  40. f"{settings.API_V1_STR}/password-recovery/{email}",
  41. headers=normal_user_token_headers,
  42. )
  43. assert r.status_code == 200
  44. assert r.json() == {"message": "Password recovery email sent"}
  45. def test_recovery_password_user_not_exits(
  46. client: TestClient, normal_user_token_headers: dict[str, str]
  47. ) -> None:
  48. email = "jVgQr@example.com"
  49. r = client.post(
  50. f"{settings.API_V1_STR}/password-recovery/{email}",
  51. headers=normal_user_token_headers,
  52. )
  53. assert r.status_code == 404
  54. def test_reset_password(
  55. client: TestClient, superuser_token_headers: dict[str, str]
  56. ) -> None:
  57. token = generate_password_reset_token(email=settings.FIRST_SUPERUSER)
  58. data = {"new_password": "changethis", "token": token}
  59. r = client.post(
  60. f"{settings.API_V1_STR}/reset-password/",
  61. headers=superuser_token_headers,
  62. json=data,
  63. )
  64. assert r.status_code == 200
  65. assert r.json() == {"message": "Password updated successfully"}
  66. def test_reset_password_invalid_token(
  67. client: TestClient, superuser_token_headers: dict[str, str]
  68. ) -> None:
  69. data = {"new_password": "changethis", "token": "invalid"}
  70. r = client.post(
  71. f"{settings.API_V1_STR}/reset-password/",
  72. headers=superuser_token_headers,
  73. json=data,
  74. )
  75. response = r.json()
  76. assert "detail" in response
  77. assert r.status_code == 400
  78. assert response["detail"] == "Invalid token"