This is an automated email from the ASF dual-hosted git repository. dill0wn pushed a commit to branch dw/8455 in repository https://gitbox.apache.org/repos/asf/allura.git
commit 8effcc6bde8e7685885f72955bfffc6d816af90c Author: Dillon Walls <[email protected]> AuthorDate: Thu Sep 15 13:44:16 2022 +0000 fixup! fixup! [#8455] allura pytest - fix misc test failures that popped up during pytest conversion --- Allura/allura/lib/macro.py | 15 ++++++++------- Allura/allura/model/project.py | 20 +++++++++++++++++++- Allura/allura/tests/test_globals.py | 25 ++++++++++++++++++++----- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/Allura/allura/lib/macro.py b/Allura/allura/lib/macro.py index b1af50297..0e293037e 100644 --- a/Allura/allura/lib/macro.py +++ b/Allura/allura/lib/macro.py @@ -177,14 +177,15 @@ def project_blog_posts(max_number=5, sort='timestamp', summary=False, mount_poin 'state': 'published', }) posts = posts.sort(sort, pymongo.DESCENDING).limit(int(max_number)).all() - output = ((dict( - href=post.url(), - title=post.title, - author=post.author().display_name, - ago=h.ago(post.timestamp), - description=summary and ' ' or g.markdown.cached_convert(post, 'text'))) + output = [ + dict(href=post.url(), + title=post.title, + author=post.author().display_name, + ago=h.ago(post.timestamp), + description=summary and ' ' or g.markdown.cached_convert(post, 'text')) for post in posts if security.has_access(post, 'read', project=post.app.project)() and - security.has_access(post.app.project, 'read', project=post.app.project)()) + security.has_access(post.app.project, 'read', project=post.app.project)() + ] posts = BlogPosts(posts=output) g.resource_manager.register(posts) response = posts.display(posts=output) diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py index c0a010f5e..66b265e80 100644 --- a/Allura/allura/model/project.py +++ b/Allura/allura/model/project.py @@ -1102,12 +1102,30 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject): ThreadLocalORMSession.flush_all() def add_user(self, user, role_names): - 'Convenience method to add member with the given role(s).' + '''Convenience method to add member with the given role(s).''' pr = ProjectRole.by_user(user, project=self, upsert=True) for role_name in role_names: r = ProjectRole.by_name(role_name, self) pr.roles.append(r._id) + def remove_user(self, user, role_names=None): + '''Convenience method to add member with the given role(s).''' + pr = ProjectRole.by_user(user, project=self) + if not pr: + return + + if not role_names or not isinstance(role_names, Iterable): + ProjectRole.query.remove({'_id': pr._id}) + return + + for role_name in role_names: + r = ProjectRole.by_name(role_name, self) + if r._id in pr.roles: + pr.roles.remove(r._id) + + if not pr.roles: + pr.remove() + @property def twitter_handle(self): return self.social_account('Twitter').accounturl diff --git a/Allura/allura/tests/test_globals.py b/Allura/allura/tests/test_globals.py index 172c1c57b..389c7a228 100644 --- a/Allura/allura/tests/test_globals.py +++ b/Allura/allura/tests/test_globals.py @@ -49,11 +49,6 @@ from forgewiki import model as WM from forgeblog import model as BM -def setup_module(module): - setup_basic_test() - setup_unit_test() - - def squish_spaces(text): # \s is whitespace # \xa0 is in unicode form @@ -85,8 +80,28 @@ def get_projects_property_in_the_same_order(names, prop): @with_nose_compatibility class Test(): + @classmethod + def setup_class(cls): + setup_basic_test() + setup_global_objects() + def setup_method(self, method): setup_global_objects() + p_nbhd = M.Neighborhood.query.get(name='Projects') + p_test = M.Project.query.get(shortname='test', neighborhood_id=p_nbhd._id) + self.acl_bak = p_test.acl.copy() + + def teardown_method(self, method): + user = M.User.by_username('test-admin') + user.display_name = 'Test Admin' + + p_nbhd = M.Neighborhood.query.get(name='Projects') + p_test = M.Project.query.get(shortname='test', neighborhood_id=p_nbhd._id) + p_test.remove_user(M.User.by_username('test-user')) + p_test.remove_user(M.User.by_username('test-user-0')) + p_test.acl = self.acl_bak + + ThreadLocalORMSession.flush_all() @td.with_wiki def test_app_globals(self):
