test_permissions.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. """
  2. This test will use the default permissions found in
  3. flaskbb.utils.populate
  4. """
  5. import pytest
  6. from flaskbb.user.models import User
  7. from flaskbb.forum.models import Forum, Category, Topic, Post
  8. from flaskbb.utils.permissions import *
  9. @pytest.fixture
  10. def category(database):
  11. category = Category(title="Test Category")
  12. category.save()
  13. return category
  14. @pytest.fixture
  15. def forum(category):
  16. forum = Forum(title="Test Forum", category_id=category.id)
  17. forum.save()
  18. return forum
  19. @pytest.fixture
  20. def moderator_user(forum, default_groups):
  21. """Creates a test user for whom the permissions should be checked"""
  22. # This should be moved to own fixture which you then use to link the user
  23. # to the forum
  24. user = User(username="test_mod", email="test_mod@example.org",
  25. password="test", primary_group_id=default_groups[2].id)
  26. user.save()
  27. forum.moderators.append(user)
  28. forum.save()
  29. return user
  30. @pytest.fixture
  31. def normal_user(default_groups):
  32. """Creates a user with normal permissions"""
  33. user = User(username="test_normal", email="test_normal@example.org",
  34. password="test", primary_group_id=default_groups[3].id)
  35. user.save()
  36. return user
  37. @pytest.fixture
  38. def admin_user(default_groups):
  39. """Creates a admin user"""
  40. user = User(username="test_admin", email="test_admin@example.org",
  41. password="test", primary_group_id=default_groups[0].id)
  42. user.save()
  43. return user
  44. @pytest.fixture
  45. def super_moderator_user(default_groups):
  46. """Creates a super moderator user"""
  47. user = User(username="test_super_mod", email="test_super@example.org",
  48. password="test", primary_group_id=default_groups[1].id)
  49. user.save()
  50. return user
  51. @pytest.fixture
  52. def topic_moderator(forum, moderator_user):
  53. topic = Topic(title="Test Topic Moderator")
  54. post = Post(content="Test Content Moderator")
  55. return topic.save(forum=forum, user=moderator_user, post=post)
  56. @pytest.fixture
  57. def topic_normal(forum, normal_user):
  58. topic = Topic(title="Test Topic Normal")
  59. post = Post(content="Test Content Normal")
  60. return topic.save(forum=forum, user=normal_user, post=post)
  61. def test_moderator_permissions_in_forum(
  62. forum, moderator_user, topic_normal, topic_moderator):
  63. """Test that the default groups are created correctly."""
  64. moderator_user.permissions = moderator_user.get_permissions()
  65. assert moderator_user in forum.moderators
  66. assert can_post_reply(moderator_user, forum)
  67. assert can_post_topic(moderator_user, forum)
  68. assert can_edit_post(moderator_user, topic_normal.user_id, forum)
  69. assert can_moderate(moderator_user, forum)
  70. assert can_delete_post(moderator_user, topic_normal.user_id, forum)
  71. assert can_delete_topic(moderator_user, topic_normal.user_id, forum)
  72. assert can_lock_topic(moderator_user, forum)
  73. assert can_merge_topic(moderator_user, forum)
  74. assert can_move_topic(moderator_user, forum)
  75. def test_moderator_permissions_without_forum(
  76. forum, moderator_user, topic_normal, topic_moderator):
  77. forum.moderators.remove(moderator_user)
  78. moderator_user.permissions = moderator_user.get_permissions()
  79. assert not moderator_user in forum.moderators
  80. assert not can_moderate(moderator_user, forum)
  81. assert can_post_reply(moderator_user, forum)
  82. assert can_post_topic(moderator_user, forum)
  83. assert not can_edit_post(moderator_user, topic_normal.user_id, forum)
  84. assert not can_delete_post(moderator_user, topic_normal.user_id, forum)
  85. assert not can_delete_topic(moderator_user, topic_normal.user_id, forum)
  86. assert not can_lock_topic(moderator_user, forum)
  87. assert not can_merge_topic(moderator_user, forum)
  88. assert not can_move_topic(moderator_user, forum)
  89. # Test with own topic
  90. assert can_delete_post(moderator_user, topic_moderator.user_id, forum)
  91. assert can_delete_topic(moderator_user, topic_moderator.user_id, forum)
  92. assert can_edit_post(moderator_user, topic_moderator.user_id, forum)
  93. def test_normal_permissions(forum, normal_user, topic_normal):
  94. normal_user.permissions = normal_user.get_permissions()
  95. assert not can_moderate(normal_user, forum)
  96. assert can_post_reply(normal_user, forum)
  97. assert can_post_topic(normal_user, forum)
  98. assert can_edit_post(normal_user, topic_normal.user_id, forum)
  99. assert not can_delete_post(normal_user, topic_normal.user_id, forum)
  100. assert not can_delete_topic(normal_user, topic_normal.user_id, forum)
  101. assert not can_lock_topic(normal_user, forum)
  102. assert not can_merge_topic(normal_user, forum)
  103. assert not can_move_topic(normal_user, forum)
  104. def test_admin_permissions(forum, admin_user, topic_normal):
  105. admin_user.permissions = admin_user.get_permissions()
  106. assert can_moderate(admin_user, forum)
  107. assert can_post_reply(admin_user, forum)
  108. assert can_post_topic(admin_user, forum)
  109. assert can_edit_post(admin_user, topic_normal.user_id, forum)
  110. assert can_delete_post(admin_user, topic_normal.user_id, forum)
  111. assert can_delete_topic(admin_user, topic_normal.user_id, forum)
  112. assert can_lock_topic(admin_user, forum)
  113. assert can_merge_topic(admin_user, forum)
  114. assert can_move_topic(admin_user, forum)
  115. def test_super_moderator_permissions(forum, super_moderator_user, topic_normal):
  116. super_moderator_user.permissions = super_moderator_user.get_permissions()
  117. assert can_moderate(super_moderator_user, forum)
  118. assert can_post_reply(super_moderator_user, forum)
  119. assert can_post_topic(super_moderator_user, forum)
  120. assert can_edit_post(super_moderator_user, topic_normal.user_id, forum)
  121. assert can_delete_post(super_moderator_user, topic_normal.user_id, forum)
  122. assert can_delete_topic(super_moderator_user, topic_normal.user_id, forum)
  123. assert can_lock_topic(super_moderator_user, forum)
  124. assert can_merge_topic(super_moderator_user, forum)
  125. assert can_move_topic(super_moderator_user, forum)