test_user_crud.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import pytest
  2. from flask import url_for
  3. from flexmeasures.data.services.users import find_user_by_email
  4. from flexmeasures.ui.tests.utils import mock_user_response
  5. """
  6. Testing if the UI crud views do auth checks and display answers.
  7. Actual logic is tested in the API tests.
  8. """
  9. def test_user_list(client, as_admin, requests_mock):
  10. requests_mock.get(
  11. "http://localhost//api/v3_0/users",
  12. status_code=200,
  13. json=mock_user_response(multiple=True),
  14. )
  15. user_index = client.get(url_for("UserCrudUI:index"), follow_redirects=True)
  16. assert user_index.status_code == 200
  17. assert b"All active users" in user_index.data
  18. @pytest.mark.parametrize("view", ["get", "toggle_active"])
  19. def test_user_page_as_nonadmin(client, as_prosumer_user1, view):
  20. user2_id = find_user_by_email("test_prosumer_user_2@seita.nl").id
  21. user_page = client.get(
  22. url_for(f"UserCrudUI:{view}", id=user2_id), follow_redirects=True
  23. )
  24. assert user_page.status_code == 403
  25. def test_user_page(client, as_admin, requests_mock, setup_accounts):
  26. mock_user = mock_user_response(as_list=False)
  27. requests_mock.get(
  28. "http://localhost//api/v3_0/users/2", status_code=200, json=mock_user
  29. )
  30. user_page = client.get(url_for("UserCrudUI:get", id=2), follow_redirects=True)
  31. assert user_page.status_code == 200
  32. assert ("User: %s" % mock_user["username"]).encode() in user_page.data
  33. user_account = setup_accounts[
  34. "Prosumer"
  35. ] # see mock_user_response, his ID is in there
  36. assert (f">{user_account.number_of_assets}</a>").encode() in user_page.data
  37. assert mock_user["email"].encode() in user_page.data
  38. def test_deactivate_user(client, as_admin, requests_mock):
  39. """Test it does not fail (logic is tested in API tests) and displays an answer."""
  40. user2 = find_user_by_email("test_prosumer_user_2@seita.nl", keep_in_session=False)
  41. requests_mock.patch(
  42. f"http://localhost//api/v3_0/users/{user2.id}",
  43. status_code=200,
  44. json={
  45. "id": user2.id,
  46. "username": user2.username,
  47. "active": False,
  48. "account_id": 1,
  49. },
  50. )
  51. # de-activate
  52. user_page = client.get(
  53. url_for("UserCrudUI:toggle_active", id=user2.id), follow_redirects=True
  54. )
  55. assert user_page.status_code == 200
  56. assert user2.username in str(user_page.data)
  57. assert b"new activation status is now False" in user_page.data
  58. def test_reset_password(client, as_admin, requests_mock):
  59. """Test it does not fail (logic is tested in API tests) and displays an answer."""
  60. user2 = find_user_by_email("test_prosumer_user_2@seita.nl", keep_in_session=False)
  61. requests_mock.patch(
  62. f"http://localhost//api/v3_0/users/{user2.id}/password-reset",
  63. status_code=200,
  64. )
  65. user_page = client.get(
  66. url_for("UserCrudUI:reset_password_for", id=user2.id),
  67. follow_redirects=True,
  68. )
  69. assert user_page.status_code == 200
  70. assert b"has been changed to a random password" in user_page.data