test_users_mass_actions.py 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from django.contrib.auth import get_user_model
  2. from django.core import mail
  3. from ....cache.test import assert_invalidates_cache
  4. from ....test import assert_contains, assert_not_contains
  5. from ... import BANS_CACHE
  6. from ...models import Ban, DataDownload
  7. from ...test import create_test_user
  8. User = get_user_model()
  9. def create_multiple_users(**kwargs):
  10. return [
  11. create_test_user("User%s" % i, "user%s@gmail.com" % i, **kwargs)
  12. for i in range(5)
  13. ]
  14. def get_multiple_users_ids(**kwargs):
  15. users = create_multiple_users(**kwargs)
  16. return [u.id for u in users]
  17. def test_multiple_users_can_be_activated_with_mass_action(
  18. admin_client, users_admin_link
  19. ):
  20. users_ids = get_multiple_users_ids(requires_activation=1)
  21. response = admin_client.post(
  22. users_admin_link, data={"action": "activate", "selected_items": users_ids}
  23. )
  24. assert not User.objects.filter(id__in=users_ids, requires_activation=1).exists()
  25. def test_activating_multiple_users_sends_email_notifications_to_them(
  26. admin_client, users_admin_link
  27. ):
  28. users_ids = get_multiple_users_ids(requires_activation=1)
  29. response = admin_client.post(
  30. users_admin_link, data={"action": "activate", "selected_items": users_ids}
  31. )
  32. assert len(mail.outbox) == len(users_ids)
  33. assert "has been activated" in mail.outbox[0].subject
  34. def test_ban_multiple_users_form_is_rendered(admin_client, users_admin_link):
  35. users_ids = get_multiple_users_ids()
  36. response = admin_client.post(
  37. users_admin_link, data={"action": "ban", "selected_items": users_ids}
  38. )
  39. assert response.status_code == 200
  40. def test_multiple_users_can_be_banned_with_mass_action(admin_client, users_admin_link):
  41. users = create_multiple_users()
  42. admin_client.post(
  43. users_admin_link,
  44. data={
  45. "action": "ban",
  46. "selected_items": [u.id for u in users],
  47. "ban_type": ["usernames", "emails", "domains"],
  48. "finalize": "",
  49. },
  50. )
  51. for user in users:
  52. Ban.objects.get(banned_value=user.username.lower())
  53. Ban.objects.get(banned_value=user.email)
  54. Ban.objects.get(banned_value="*%s" % user.email[-10:])
  55. def test_option_to_ban_multiple_users_ips_is_disabled_if_user_ips_are_not_available(
  56. admin_client, users_admin_link
  57. ):
  58. users_ids = get_multiple_users_ids()
  59. response = admin_client.post(
  60. users_admin_link, data={"action": "ban", "selected_items": users_ids}
  61. )
  62. assert_not_contains(response, 'value="ip"')
  63. assert_not_contains(response, 'value="ip_first"')
  64. assert_not_contains(response, 'value="ip_two"')
  65. def test_option_to_ban_multiple_users_ips_is_enabled_if_user_ips_are_available(
  66. admin_client, users_admin_link
  67. ):
  68. users_ids = get_multiple_users_ids(joined_from_ip="1.2.3.4")
  69. response = admin_client.post(
  70. users_admin_link, data={"action": "ban", "selected_items": users_ids}
  71. )
  72. assert_contains(response, 'value="ip"')
  73. assert_contains(response, 'value="ip_first"')
  74. assert_contains(response, 'value="ip_two"')
  75. def test_multiple_users_ips_can_be_banned_with_mass_action(
  76. admin_client, users_admin_link
  77. ):
  78. users_ids = get_multiple_users_ids(joined_from_ip="1.2.3.4")
  79. response = admin_client.post(
  80. users_admin_link,
  81. data={
  82. "action": "ban",
  83. "selected_items": users_ids,
  84. "ban_type": ["ip", "ip_first", "ip_two"],
  85. "finalize": "",
  86. },
  87. )
  88. Ban.objects.get(banned_value="1.2.3.4")
  89. Ban.objects.get(banned_value="1.*")
  90. Ban.objects.get(banned_value="1.2.*")
  91. def test_banning_multiple_users_with_mass_action_invalidates_bans_cache(
  92. admin_client, users_admin_link
  93. ):
  94. users_ids = get_multiple_users_ids()
  95. with assert_invalidates_cache(BANS_CACHE):
  96. admin_client.post(
  97. users_admin_link,
  98. data={
  99. "action": "ban",
  100. "selected_items": users_ids,
  101. "ban_type": ["usernames", "emails", "domains"],
  102. "finalize": "",
  103. },
  104. )