1
# -*- coding: iso-8859-1 -*-
3
MoinMoin - MoinMoin.backends.wiki_group tests
5
@copyright: 2003-2004 by Juergen Hermann <jh@web.de>,
6
2007 by MoinMoin:ThomasWaldmann
7
2008 by MoinMoin:MelitaMihaljevic
8
2009 by MoinMoin:DmitrijsMilajevs
9
@license: GNU GPL, see COPYING for details.
12
from py.test import raises
15
from MoinMoin.datastruct.backends._tests import GroupsBackendTest
16
from MoinMoin.datastruct import WikiGroups
17
from MoinMoin import Page, security
18
from MoinMoin.PageEditor import PageEditor
19
from MoinMoin.user import User
20
from MoinMoin._tests import append_page, become_trusted, create_page, create_random_string_list, nuke_page, nuke_user, wikiconfig
23
class TestWikiGroupBackend(GroupsBackendTest):
25
# Suppose that default configuration for the groups is used which
26
# is WikiGroups backend.
28
def setup_class(self):
29
become_trusted(self.request)
31
for group, members in self.test_groups.iteritems():
32
page_text = ' * %s' % '\n * '.join(members)
33
create_page(self.request, group, page_text)
35
def teardown_class(self):
36
become_trusted(self.request)
38
for group in self.test_groups:
39
nuke_page(self.request, group)
41
def test_rename_group_page(self):
43
Tests if the groups cache is refreshed after renaming a Group page.
45
request = self.request
46
become_trusted(request)
48
page = create_page(request, u'SomeGroup', u" * ExampleUser")
49
page.renamePage('AnotherGroup')
51
result = u'ExampleUser' in request.groups[u'AnotherGroup']
52
nuke_page(request, u'AnotherGroup')
56
def test_copy_group_page(self):
58
Tests if the groups cache is refreshed after copying a Group page.
60
request = self.request
61
become_trusted(request)
63
page = create_page(request, u'SomeGroup', u" * ExampleUser")
64
page.copyPage(u'SomeOtherGroup')
66
result = u'ExampleUser' in request.groups[u'SomeOtherGroup']
68
nuke_page(request, u'OtherGroup')
69
nuke_page(request, u'SomeGroup')
73
def test_appending_group_page(self):
75
Test scalability by appending a name to a large list of group members.
77
request = self.request
78
become_trusted(request)
81
page_content = [u" * %s" % member for member in create_random_string_list(length=15, count=1234)]
82
test_user = create_random_string_list(length=15, count=1)[0]
83
create_page(request, u'UserGroup', "\n".join(page_content))
84
append_page(request, u'UserGroup', u' * %s' % test_user)
85
result = test_user in request.groups['UserGroup']
86
nuke_page(request, u'UserGroup')
90
def test_user_addition_to_group_page(self):
92
Test addition of a username to a large list of group members.
94
request = self.request
95
become_trusted(request)
98
page_content = [u" * %s" % member for member in create_random_string_list()]
99
create_page(request, u'UserGroup', "\n".join(page_content))
101
new_user = create_random_string_list(length=15, count=1)[0]
102
append_page(request, u'UserGroup', u' * %s' % new_user)
103
user = User(request, name=new_user)
104
if not user.exists():
105
User(request, name=new_user, password=new_user).save()
107
result = new_user in request.groups[u'UserGroup']
108
nuke_page(request, u'UserGroup')
109
nuke_user(request, new_user)
113
def test_member_removed_from_group_page(self):
115
Tests appending a member to a large list of group members and
116
recreating the page without the member.
118
request = self.request
119
become_trusted(request)
122
page_content = [u" * %s" % member for member in create_random_string_list()]
123
page_content = "\n".join(page_content)
124
create_page(request, u'UserGroup', page_content)
126
test_user = create_random_string_list(length=15, count=1)[0]
127
page = append_page(request, u'UserGroup', u' * %s' % test_user)
129
# saves the text without test_user
130
page.saveText(page_content, 0)
131
result = test_user in request.groups[u'UserGroup']
132
nuke_page(request, u'UserGroup')
136
def test_group_page_user_addition_trivial_change(self):
138
Test addition of a user to a group page by trivial change.
140
request = self.request
141
become_trusted(request)
143
test_user = create_random_string_list(length=15, count=1)[0]
144
member = u" * %s\n" % test_user
145
page = create_page(request, u'UserGroup', member)
147
# next member saved as trivial change
148
test_user = create_random_string_list(length=15, count=1)[0]
149
member = u" * %s\n" % test_user
150
page.saveText(member, 0, trivial=1)
152
result = test_user in request.groups[u'UserGroup']
154
nuke_page(request, u'UserGroup')
158
def test_wiki_backend_page_acl_append_page(self):
160
Test if the wiki group backend works with acl code.
161
First check acl rights of a user that is not a member of group
162
then add user member to a page group and check acl rights
164
request = self.request
165
become_trusted(request)
167
create_page(request, u'NewGroup', u" * ExampleUser")
169
acl_rights = ["NewGroup:read,write"]
170
acl = security.AccessControlList(request.cfg, acl_rights)
172
has_rights_before = acl.may(request, u"AnotherUser", "read")
174
# update page - add AnotherUser to a page group NewGroup
175
append_page(request, u'NewGroup', u" * AnotherUser")
177
has_rights_after = acl.may(request, u"AnotherUser", "read")
179
nuke_page(request, u'NewGroup')
181
assert not has_rights_before, 'AnotherUser has no read rights because in the beginning he is not a member of a group page NewGroup'
182
assert has_rights_after, 'AnotherUser must have read rights because after appendage he is member of NewGroup'
184
coverage_modules = ['MoinMoin.datastruct.backends.wiki_groups']