summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-09-13 18:10:48 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-09-13 18:10:48 -0400
commit9738bd55cf2e370659b3fed6a96b4bbd19b3b445 (patch)
tree5e71d849481e39b9d3c07409df4f50bebd708870
parentde7bf3bb0672f658d93d5fbd9576541024ac0552 (diff)
downloadaskbot-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.py12
-rw-r--r--askbot/tests/db_api_tests.py16
-rw-r--r--askbot/tests/thread_model_tests.py10
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)