diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-09-13 18:10:48 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2012-09-13 18:10:48 -0400 |
commit | 9738bd55cf2e370659b3fed6a96b4bbd19b3b445 (patch) | |
tree | 5e71d849481e39b9d3c07409df4f50bebd708870 | |
parent | de7bf3bb0672f658d93d5fbd9576541024ac0552 (diff) | |
download | askbot-9738bd55cf2e370659b3fed6a96b4bbd19b3b445.tar.gz askbot-9738bd55cf2e370659b3fed6a96b4bbd19b3b445.tar.bz2 askbot-9738bd55cf2e370659b3fed6a96b4bbd19b3b445.zip |
hopefully fixed the answer publishing problem where asker and answerer share custom groups
-rw-r--r-- | askbot/models/post.py | 12 | ||||
-rw-r--r-- | askbot/tests/db_api_tests.py | 16 | ||||
-rw-r--r-- | askbot/tests/thread_model_tests.py | 10 |
3 files changed, 32 insertions, 6 deletions
diff --git a/askbot/models/post.py b/askbot/models/post.py index 173da32c..d22d2f8f 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -473,7 +473,7 @@ class Post(models.Model): return data #todo: when models are merged, it would be great to remove author parameter - def parse_and_save(self, author = None, **kwargs): + def parse_and_save(self, author=None, **kwargs): """generic method to use with posts to be used prior to saving post edit or addition """ @@ -672,7 +672,15 @@ class Post(models.Model): if group != global_group: self.remove_from_groups((global_group,)) else: - groups = user.get_groups(private=True) + if self.thread_id and self.is_question() is False: + #for thread-related responses we base + #privacy scope on thread + add a personal group + personal_group = user.get_personal_group() + thread_groups = self.thread.get_groups_shared_with() + groups = set([personal_group]) | set(thread_groups) + else: + groups = user.get_groups(private=True) + self.add_to_groups(groups) self.remove_from_groups((get_global_group(),)) diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py index b9b7e3f4..fa166ba7 100644 --- a/askbot/tests/db_api_tests.py +++ b/askbot/tests/db_api_tests.py @@ -491,12 +491,20 @@ class GroupTests(AskbotTestCase): comment = self.post_comment(parent_post=answer, user=self.u1) group = self.create_group(group_name='private') self.u1.join_group(group) + + #membership in `group` should not affect things, + #because answer groups always inherit thread groups self.edit_answer(user=self.u1, answer=answer, is_private=True) - self.assertEqual(answer.groups.count(), 2) - self.assertEqual(answer.groups.filter(id=group.id).count(), 1) + self.assertEqual(answer.groups.count(), 1) + + #here we have a simple case - the comment to answer was posted + #by the answer author!!! + #won't work when comment was by someone else + u1_group = self.u1.get_personal_group() + self.assertEqual(answer.groups.filter(id=u1_group.id).count(), 1) #comment inherits the sharing scope - self.assertEqual(comment.groups.count(), 2) - self.assertEqual(comment.groups.filter(id=group.id).count(), 1) + self.assertEqual(comment.groups.count(), 1) + self.assertEqual(comment.groups.filter(id=u1_group.id).count(), 1) def test_public_question_private_answer_works(self): question = self.post_question(self.u1) diff --git a/askbot/tests/thread_model_tests.py b/askbot/tests/thread_model_tests.py index 5472216b..baf51e8e 100644 --- a/askbot/tests/thread_model_tests.py +++ b/askbot/tests/thread_model_tests.py @@ -82,6 +82,16 @@ class ThreadModelTestsWithGroupsEnabled(AskbotTestCase): def test_restrictive_response_publishing(self): + #restrictive model should work even with groups + #in common between the asker and the answerer + common_group = models.Group( + name='common', + openness=models.Group.OPEN + ) + common_group.save() + self.admin.join_group(common_group) + self.user.join_group(common_group) + self.group.moderate_answers_to_enquirers = True self.group.save() question = self.post_question(user=self.user, group_id=self.group.id) |