From fcfc7006ea68ea46de92d7b686f9c606a8cfab5e Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Mon, 22 Oct 2012 17:16:15 -0300 Subject: moved get_global_group() onto GroupManager --- askbot/3 | 206 +++++++++++++++++++++++++++++++++++ askbot/conf/group_settings.py | 5 +- askbot/context.py | 2 +- askbot/models/__init__.py | 5 +- askbot/models/post.py | 11 +- askbot/models/question.py | 13 +-- askbot/models/tag.py | 15 --- askbot/models/user.py | 18 ++- askbot/tests/db_api_tests.py | 9 +- askbot/tests/question_views_tests.py | 13 +-- askbot/tests/thread_model_tests.py | 5 +- askbot/views/commands.py | 3 +- askbot/views/users.py | 5 +- 13 files changed, 253 insertions(+), 57 deletions(-) create mode 100644 askbot/3 diff --git a/askbot/3 b/askbot/3 new file mode 100644 index 00000000..223f65f6 --- /dev/null +++ b/askbot/3 @@ -0,0 +1,206 @@ +from bs4 import BeautifulSoup +from askbot.conf import settings as askbot_settings +from askbot import const +from askbot.tests.utils import AskbotTestCase +from askbot import models +from django.core.urlresolvers import reverse + + +class PrivateQuestionViewsTests(AskbotTestCase): + + def setUp(self): + self._backup = askbot_settings.GROUPS_ENABLED + askbot_settings.update('GROUPS_ENABLED', True) + self.user = self.create_user('user') + self.group = models.Group.objects.create( + name='the group', openness=models.Group.OPEN + ) + self.user.join_group(self.group) + self.qdata = { + 'title': 'test question title', + 'text': 'test question text' + } + self.client.login(user_id=self.user.id, method='force') + + def tearDown(self): + askbot_settings.update('GROUPS_ENABLED', self._backup) + + def test_post_private_question(self): + data = self.qdata + data['post_privately'] = 'checked' + response1 = self.client.post(reverse('ask'), data=data) + response2 = self.client.get(response1['location']) + dom = BeautifulSoup(response2.content) + title = dom.find('h1').text + self.assertTrue(const.POST_STATUS['private'] in title) + question = models.Thread.objects.get(id=1) + self.assertEqual(question.title, self.qdata['title']) + self.assertFalse(models.Group.objects.get_global_group() in set(question.groups.all())) + + #private question is not accessible to unauthorized users + self.client.logout() + response = self.client.get(question._question_post().get_absolute_url()) + self.assertEqual(response.status_code, 302) + self.assertEqual(response.content, '') + #private question link is not shown on the main page + #to unauthorized users + response = self.client.get(reverse('questions')) + self.assertFalse(self.qdata['title'] in response.content) + #private question link is not shown on the poster profile + #to the unauthorized users + response = self.client.get(self.user.get_profile_url()) + self.assertFalse(self.qdata['title'] in response.content) + + def test_publish_private_question(self): + question = self.post_question(user=self.user, is_private=True) + title = question.thread.get_title() + self.assertTrue(const.POST_STATUS['private'] in title) + data = self.qdata + #data['post_privately'] = 'false' + data['select_revision'] = 'false' + data['text'] = 'edited question text' + response1 = self.client.post( + reverse('edit_question', kwargs={'id':question.id}), + data=data + ) + response2 = self.client.get(question.get_absolute_url()) + dom = BeautifulSoup(response2.content) + title = dom.find('h1').text + self.assertTrue(models.Group.objects.get_global_group() in set(question.groups.all())) + self.assertEqual(title, self.qdata['title']) + + self.client.logout() + response = self.client.get(question.get_absolute_url()) + self.assertTrue('edited question text' in response.content) + + def test_privatize_public_question(self): + question = self.post_question(user=self.user) + title = question.thread.get_title() + self.assertFalse(const.POST_STATUS['private'] in title) + data = self.qdata + data['post_privately'] = 'checked' + data['select_revision'] = 'false' + response1 = self.client.post( + reverse('edit_question', kwargs={'id':question.id}), + data=data + ) + response2 = self.client.get(question.get_absolute_url()) + dom = BeautifulSoup(response2.content) + title = dom.find('h1').text + self.assertFalse(models.Group.objects.get_global_group() in set(question.groups.all())) + self.assertTrue(const.POST_STATUS['private'] in title) + + def test_private_checkbox_is_on_when_editing_private_question(self): + question = self.post_question(user=self.user, is_private=True) + response = self.client.get( + reverse('edit_question', kwargs={'id':question.id}) + ) + dom = BeautifulSoup(response.content) + checkbox = dom.find( + 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} + ) + self.assertEqual(checkbox['checked'], 'checked') + + def test_private_checkbox_is_off_when_editing_public_question(self): + question = self.post_question(user=self.user) + response = self.client.get( + reverse('edit_question', kwargs={'id':question.id}) + ) + dom = BeautifulSoup(response.content) + checkbox = dom.find( + 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} + ) + self.assertEqual(checkbox.get('checked', False), False) + + +class PrivateAnswerViewsTests(AskbotTestCase): + + def setUp(self): + self._backup = askbot_settings.GROUPS_ENABLED + askbot_settings.update('GROUPS_ENABLED', True) + self.user = self.create_user('user') + group = models.Group.objects.create( + name='the group', openness=models.Group.OPEN + ) + self.user.join_group(group) + self.question = self.post_question(user=self.user) + self.client.login(user_id=self.user.id, method='force') + + def tearDown(self): + askbot_settings.update('GROUPS_ENABLED', self._backup) + + def test_post_private_answer(self): + response1 = self.client.post( + reverse('answer', kwargs={'id': self.question.id}), + data={'text': 'some answer text', 'post_privately': 'checked'} + ) + answer = self.question.thread.get_answers(user=self.user)[0] + self.assertFalse(models.Group.objects.get_global_group() in set(answer.groups.all())) + self.client.logout() + + user2 = self.create_user('user2') + self.client.login(user_id=user2.id, method='force') + response = self.client.get(self.question.get_absolute_url()) + self.assertFalse('some answer text' in response.content) + + self.client.logout() + response = self.client.get(self.question.get_absolute_url()) + self.assertFalse('some answer text' in response.content) + + + def test_private_checkbox_is_on_when_editing_private_answer(self): + answer = self.post_answer( + question=self.question, user=self.user, is_private=True + ) + response = self.client.get( + reverse('edit_answer', kwargs={'id': answer.id}) + ) + dom = BeautifulSoup(response.content) + checkbox = dom.find( + 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} + ) + self.assertEqual(checkbox['checked'], 'checked') + + def test_privaet_checkbox_is_off_when_editing_public_answer(self): + answer = self.post_answer(question=self.question, user=self.user) + response = self.client.get( + reverse('edit_answer', kwargs={'id': answer.id}) + ) + dom = BeautifulSoup(response.content) + checkbox = dom.find( + 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} + ) + self.assertEqual(checkbox.get('checked', False), False) + + def test_publish_private_answer(self): + answer = self.post_answer( + question=self.question, user=self.user, is_private=True + ) + self.client.post( + reverse('edit_answer', kwargs={'id': answer.id}), + data={'text': 'edited answer text', 'select_revision': 'false'} + ) + answer = self.reload_object(answer) + self.assertTrue(models.Group.objects.get_global_group() in answer.groups.all()) + self.client.logout() + response = self.client.get(self.question.get_absolute_url()) + self.assertTrue('edited answer text' in response.content) + + + def test_privatize_public_answer(self): + answer = self.post_answer(question=self.question, user=self.user) + self.client.post( + reverse('edit_answer', kwargs={'id': answer.id}), + data={ + 'text': 'edited answer text', + 'post_privately': 'checked', + 'select_revision': 'false' + } + ) + #check that answer is not visible to the "everyone" group + answer = self.reload_object(answer) + self.assertFalse(models.Group.objects.get_global_group() in answer.groups.all()) + #check that countent is not seen by an anonymous user + self.client.logout() + response = self.client.get(self.question.get_absolute_url()) + self.assertFalse('edited answer text' in response.content) diff --git a/askbot/conf/group_settings.py b/askbot/conf/group_settings.py index 2933b831..04be618f 100644 --- a/askbot/conf/group_settings.py +++ b/askbot/conf/group_settings.py @@ -20,14 +20,15 @@ settings.register( ) def group_name_update_callback(old_name, new_name): - from askbot.models.tag import get_global_group, clean_group_name + from askbot.models.tag import clean_group_name + from askbot.models import Group cleaned_new_name = clean_group_name(new_name.strip()) if new_name == '': #name cannot be empty return old_name - group = get_global_group() + group = Group.objects.get_global_group() group.name = cleaned_new_name group.save() return new_name diff --git a/askbot/context.py b/askbot/context.py index 5e53febc..61f833cb 100644 --- a/askbot/context.py +++ b/askbot/context.py @@ -69,7 +69,7 @@ def application_settings(request): ) #load id's and names of all groups - global_group = models.tag.get_global_group() + global_group = models.Group.objects.get_global_group() groups = models.Group.objects.exclude_personal() groups = groups.exclude(id=global_group.id) groups_data = list(groups.values('id', 'name')) diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index db9674e2..9c9880b2 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -41,8 +41,6 @@ from askbot.models.question import QuestionView, AnonymousQuestion from askbot.models.question import DraftQuestion from askbot.models.question import FavoriteQuestion from askbot.models.tag import Tag, MarkedTag -from askbot.models.tag import get_global_group -from askbot.models.tag import get_group_names from askbot.models.tag import get_groups from askbot.models.tag import format_personal_group_name from askbot.models.user import EmailFeedSetting, ActivityAuditStatus, Activity @@ -3464,9 +3462,8 @@ def add_user_to_global_group(sender, instance, created, **kwargs): ``instance`` is an instance of ``User`` class """ if created: - from askbot.models.tag import get_global_group instance.edit_group_membership( - group=get_global_group(), + group=Group.objects.get_global_group(), user=instance, action='add' ) diff --git a/askbot/models/post.py b/askbot/models/post.py index 0c5e2b00..85628f55 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -31,7 +31,6 @@ from askbot.models.user import Group from askbot.models.user import GroupMembership from askbot.models.tag import Tag, MarkedTag from askbot.models.tag import get_groups, tags_match_some_wildcard -from askbot.models.tag import get_global_group from askbot.conf import settings as askbot_settings from askbot import exceptions from askbot.utils import markup @@ -62,7 +61,7 @@ class PostQuerySet(models.query.QuerySet): def get_for_user(self, user): if askbot_settings.GROUPS_ENABLED: if user is None or user.is_anonymous(): - groups = [get_global_group()] + groups = [Group.objects.get_global_group()] else: groups = user.get_groups() return self.filter(groups__in = groups).distinct() @@ -692,7 +691,7 @@ class Post(models.Model): groups = [group] self.add_to_groups(groups) - global_group = get_global_group() + global_group = Group.objects.get_global_group() if group != global_group: self.remove_from_groups((global_group,)) else: @@ -706,7 +705,7 @@ class Post(models.Model): groups = user.get_groups(private=True) self.add_to_groups(groups) - self.remove_from_groups((get_global_group(),)) + self.remove_from_groups((Group.objects.get_global_group(),)) if len(groups) == 0: message = 'Sharing did not work, because group is unknown' @@ -714,13 +713,13 @@ class Post(models.Model): def make_public(self): """removes the privacy mark from users groups""" - groups = (get_global_group(),) + groups = (Group.objects.get_global_group(),) self.add_to_groups(groups) def is_private(self): """true, if post belongs to the global group""" if askbot_settings.GROUPS_ENABLED: - group = get_global_group() + group = Group.objects.get_global_group() return not self.groups.filter(id=group.id).exists() return False diff --git a/askbot/models/question.py b/askbot/models/question.py index f94265b0..76411ffa 100644 --- a/askbot/models/question.py +++ b/askbot/models/question.py @@ -18,7 +18,6 @@ from askbot import mail from askbot.mail import messages from askbot.models.tag import Tag from askbot.models.tag import get_groups -from askbot.models.tag import get_global_group from askbot.models.tag import get_tags_by_names from askbot.models.tag import filter_accepted_tags, filter_suggested_tags from askbot.models.tag import delete_tags, separate_unused_tags @@ -41,7 +40,7 @@ class ThreadQuerySet(models.query.QuerySet): if user.is_authenticated(): groups = user.get_groups() else: - groups = [get_global_group()] + groups = [Group.objects.get_global_group()] return self.filter(groups__in=groups).distinct() class ThreadManager(BaseQuerySetManager): @@ -825,7 +824,7 @@ class Thread(models.Model): thread_posts = self.posts.all() if askbot_settings.GROUPS_ENABLED: if user is None or user.is_anonymous(): - groups = (get_global_group(),) + groups = (Group.objects.get_global_group(),) else: groups = user.get_groups() @@ -1078,7 +1077,7 @@ class Thread(models.Model): def make_public(self, recursive=False): """adds the global group to the thread""" - groups = (get_global_group(), ) + groups = (Group.objects.get_global_group(), ) self.add_to_groups(groups, recursive=recursive) if recursive == False: self._question_post().make_public() @@ -1093,13 +1092,13 @@ class Thread(models.Model): groups = [group] self.add_to_groups(groups) - global_group = get_global_group() + global_group = Group.objects.get_global_group() if group != global_group: self.remove_from_groups((global_group,)) else: groups = user.get_groups(private=True) self.add_to_groups(groups) - self.remove_from_groups((get_global_group(),)) + self.remove_from_groups((Group.objects.get_global_group(),)) self._question_post().make_private(user, group_id) @@ -1110,7 +1109,7 @@ class Thread(models.Model): def is_private(self): """true, if thread belongs to the global group""" if askbot_settings.GROUPS_ENABLED: - group = get_global_group() + group = Group.objects.get_global_group() return not self.groups.filter(id=group.id).exists() return False diff --git a/askbot/models/tag.py b/askbot/models/tag.py index 647ea5cf..0c029d27 100644 --- a/askbot/models/tag.py +++ b/askbot/models/tag.py @@ -9,21 +9,6 @@ from askbot import const from askbot.conf import settings as askbot_settings from askbot.utils import category_tree -def get_global_group(): - """Returns the global group, - if necessary, creates one - """ - #todo: when groups are disconnected from tags, - #find comment as shown below in the test cases and - #revert the values - #todo: change groups to django groups - group_name = askbot_settings.GLOBAL_GROUP_NAME - from askbot.models import Group - try: - return Group.objects.get(name=group_name) - except Group.DoesNotExist: - return Group.objects.create(name=group_name) - def delete_tags(tags): """deletes tags in the list""" tag_ids = [tag.id for tag in tags] diff --git a/askbot/models/user.py b/askbot/models/user.py index e5cccbf3..00e9428a 100644 --- a/askbot/models/user.py +++ b/askbot/models/user.py @@ -15,7 +15,7 @@ from askbot import const from askbot.conf import settings as askbot_settings from askbot.utils import functions from askbot.models.base import BaseQuerySetManager -from askbot.models.tag import Tag, get_global_group +from askbot.models.tag import Tag from askbot.models.tag import clean_group_name#todo - delete this from askbot.forms import DomainNameField from askbot.utils.forms import email_is_allowed @@ -411,7 +411,7 @@ class GroupQuerySet(models.query.QuerySet): def get_for_user(self, user=None, private=False): if private: - global_group = get_global_group() + global_group = Group.objects.get_global_group() return self.filter( user=user ).exclude(id=global_group.id) @@ -428,6 +428,20 @@ class GroupManager(BaseQuerySetManager): def get_query_set(self): return GroupQuerySet(self.model) + def get_global_group(self): + """Returns the global group, + if necessary, creates one + """ + #todo: when groups are disconnected from tags, + #find comment as shown below in the test cases and + #revert the values + #todo: change groups to django groups + group_name = askbot_settings.GLOBAL_GROUP_NAME + try: + return self.get_query_set().get(name=group_name) + except Group.DoesNotExist: + return self.get_query_set().create(name=group_name) + def create(self, **kwargs): name = kwargs['name'] try: diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py index 8a6ffe0e..0af6d955 100644 --- a/askbot/tests/db_api_tests.py +++ b/askbot/tests/db_api_tests.py @@ -15,7 +15,6 @@ from askbot.tests.utils import with_settings from askbot import models from askbot import const from askbot.conf import settings as askbot_settings -from askbot.models.tag import get_global_group import datetime class DBApiTests(AskbotTestCase): @@ -515,11 +514,11 @@ class GroupTests(AskbotTestCase): def test_global_group_name_setting_changes_group_name(self): askbot_settings.update('GLOBAL_GROUP_NAME', 'all-people') - group = get_global_group() + group = models.Group.objects.get_global_group() self.assertEqual(group.name, 'all-people') def test_ask_global_group_by_id_works(self): - group = get_global_group() + group = models.Group.objects.get_global_group() q = self.post_question(user=self.u1, group_id=group.id) self.assertEqual(q.groups.count(), 2) self.assertEqual(q.groups.filter(name=group.name).exists(), True) @@ -601,7 +600,7 @@ class GroupTests(AskbotTestCase): data['thread'].make_public(recursive=True) - global_group = get_global_group() + global_group = models.Group.objects.get_global_group() groups = [global_group, private_group, self.u1.get_personal_group()] self.assertObjectGroupsEqual(data['thread'], groups) self.assertObjectGroupsEqual(data['question'], groups) @@ -616,7 +615,7 @@ class GroupTests(AskbotTestCase): thread = data['thread'] thread.add_to_groups([private_group], recursive=True) - global_group = get_global_group() + global_group = models.Group.objects.get_global_group() groups = [global_group, private_group, self.u1.get_personal_group()] self.assertObjectGroupsEqual(thread, groups) self.assertObjectGroupsEqual(data['question'], groups) diff --git a/askbot/tests/question_views_tests.py b/askbot/tests/question_views_tests.py index b1836f9e..223f65f6 100644 --- a/askbot/tests/question_views_tests.py +++ b/askbot/tests/question_views_tests.py @@ -3,7 +3,6 @@ from askbot.conf import settings as askbot_settings from askbot import const from askbot.tests.utils import AskbotTestCase from askbot import models -from askbot.models.tag import get_global_group from django.core.urlresolvers import reverse @@ -36,7 +35,7 @@ class PrivateQuestionViewsTests(AskbotTestCase): self.assertTrue(const.POST_STATUS['private'] in title) question = models.Thread.objects.get(id=1) self.assertEqual(question.title, self.qdata['title']) - self.assertFalse(get_global_group() in set(question.groups.all())) + self.assertFalse(models.Group.objects.get_global_group() in set(question.groups.all())) #private question is not accessible to unauthorized users self.client.logout() @@ -67,7 +66,7 @@ class PrivateQuestionViewsTests(AskbotTestCase): response2 = self.client.get(question.get_absolute_url()) dom = BeautifulSoup(response2.content) title = dom.find('h1').text - self.assertTrue(get_global_group() in set(question.groups.all())) + self.assertTrue(models.Group.objects.get_global_group() in set(question.groups.all())) self.assertEqual(title, self.qdata['title']) self.client.logout() @@ -88,7 +87,7 @@ class PrivateQuestionViewsTests(AskbotTestCase): response2 = self.client.get(question.get_absolute_url()) dom = BeautifulSoup(response2.content) title = dom.find('h1').text - self.assertFalse(get_global_group() in set(question.groups.all())) + self.assertFalse(models.Group.objects.get_global_group() in set(question.groups.all())) self.assertTrue(const.POST_STATUS['private'] in title) def test_private_checkbox_is_on_when_editing_private_question(self): @@ -136,7 +135,7 @@ class PrivateAnswerViewsTests(AskbotTestCase): data={'text': 'some answer text', 'post_privately': 'checked'} ) answer = self.question.thread.get_answers(user=self.user)[0] - self.assertFalse(get_global_group() in set(answer.groups.all())) + self.assertFalse(models.Group.objects.get_global_group() in set(answer.groups.all())) self.client.logout() user2 = self.create_user('user2') @@ -182,7 +181,7 @@ class PrivateAnswerViewsTests(AskbotTestCase): data={'text': 'edited answer text', 'select_revision': 'false'} ) answer = self.reload_object(answer) - self.assertTrue(get_global_group() in answer.groups.all()) + self.assertTrue(models.Group.objects.get_global_group() in answer.groups.all()) self.client.logout() response = self.client.get(self.question.get_absolute_url()) self.assertTrue('edited answer text' in response.content) @@ -200,7 +199,7 @@ class PrivateAnswerViewsTests(AskbotTestCase): ) #check that answer is not visible to the "everyone" group answer = self.reload_object(answer) - self.assertFalse(get_global_group() in answer.groups.all()) + self.assertFalse(models.Group.objects.get_global_group() in answer.groups.all()) #check that countent is not seen by an anonymous user self.client.logout() response = self.client.get(self.question.get_absolute_url()) diff --git a/askbot/tests/thread_model_tests.py b/askbot/tests/thread_model_tests.py index baf51e8e..33a2055c 100644 --- a/askbot/tests/thread_model_tests.py +++ b/askbot/tests/thread_model_tests.py @@ -1,7 +1,6 @@ from askbot.tests.utils import AskbotTestCase from askbot.conf import settings as askbot_settings from askbot import models -from askbot.models.tag import get_global_group import django.core.mail from django.core.urlresolvers import reverse @@ -63,7 +62,7 @@ class ThreadModelTestsWithGroupsEnabled(AskbotTestCase): def test_answer_to_private_question_is_not_globally_visible(self): question = self.post_question(user=self.admin, is_private=True) answer = self.post_answer(question=question, user=self.admin, is_private=False) - global_group = get_global_group() + global_group = models.Group.objects.get_global_group() self.assertEqual( global_group in set(answer.groups.all()), False @@ -74,7 +73,7 @@ class ThreadModelTestsWithGroupsEnabled(AskbotTestCase): question = self.post_question(user=self.user, group_id=self.group.id) #answer posted by a group member answer = self.post_answer(question=question, user=self.admin, is_private=False) - global_group = get_global_group() + global_group = models.Group.objects.get_global_group() self.assertEqual( global_group in set(answer.groups.all()), False diff --git a/askbot/views/commands.py b/askbot/views/commands.py index f7d22f48..5a76790f 100644 --- a/askbot/views/commands.py +++ b/askbot/views/commands.py @@ -30,7 +30,6 @@ from askbot import models from askbot import forms from askbot.conf import should_show_sort_by_relevance from askbot.conf import settings as askbot_settings -from askbot.models.tag import get_global_group from askbot.utils import category_tree from askbot.utils import decorators from askbot.utils import url_utils @@ -649,7 +648,7 @@ def add_tag_category(request): def get_groups_list(request): """returns names of group tags for the autocomplete function""" - global_group = get_global_group() + global_group = models.Group.objects.get_global_group() groups = models.Group.objects.exclude_personal() group_names = groups.exclude( name=global_group.name diff --git a/askbot/views/users.py b/askbot/views/users.py index c22fd294..b30e546d 100644 --- a/askbot/views/users.py +++ b/askbot/views/users.py @@ -39,7 +39,6 @@ from askbot.conf import settings as askbot_settings from askbot import models from askbot import exceptions from askbot.models.badges import award_badges_signal -from askbot.models.tag import get_global_group from askbot.models.tag import get_groups from askbot.models.tag import format_personal_group_name from askbot.skins.loaders import render_into_skin @@ -65,7 +64,7 @@ def show_users(request, by_group=False, group_id=None, group_slug=None): """Users view, including listing of users by group""" if askbot_settings.GROUPS_ENABLED and not by_group: - default_group = get_global_group() + default_group = models.Group.objects.get_global_group() group_slug = slugify(default_group.name) new_url = reverse('users_by_group', kwargs={'group_id': default_group.id, @@ -491,7 +490,7 @@ def user_stats(request, user, context): user_groups = models.Group.objects.get_for_user(user = user) user_groups = user_groups.exclude_personal() - global_group = get_global_group() + global_group = models.Group.objects.get_global_group() user_groups = user_groups.exclude(name=global_group.name) if request.user == user: -- cgit v1.2.3-1-g7c22 From e3e1a54048ceaca79df81344a51ac67d107d92d0 Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Mon, 22 Oct 2012 17:17:15 -0300 Subject: deleted a junk file --- askbot/3 | 206 --------------------------------------------------------------- 1 file changed, 206 deletions(-) delete mode 100644 askbot/3 diff --git a/askbot/3 b/askbot/3 deleted file mode 100644 index 223f65f6..00000000 --- a/askbot/3 +++ /dev/null @@ -1,206 +0,0 @@ -from bs4 import BeautifulSoup -from askbot.conf import settings as askbot_settings -from askbot import const -from askbot.tests.utils import AskbotTestCase -from askbot import models -from django.core.urlresolvers import reverse - - -class PrivateQuestionViewsTests(AskbotTestCase): - - def setUp(self): - self._backup = askbot_settings.GROUPS_ENABLED - askbot_settings.update('GROUPS_ENABLED', True) - self.user = self.create_user('user') - self.group = models.Group.objects.create( - name='the group', openness=models.Group.OPEN - ) - self.user.join_group(self.group) - self.qdata = { - 'title': 'test question title', - 'text': 'test question text' - } - self.client.login(user_id=self.user.id, method='force') - - def tearDown(self): - askbot_settings.update('GROUPS_ENABLED', self._backup) - - def test_post_private_question(self): - data = self.qdata - data['post_privately'] = 'checked' - response1 = self.client.post(reverse('ask'), data=data) - response2 = self.client.get(response1['location']) - dom = BeautifulSoup(response2.content) - title = dom.find('h1').text - self.assertTrue(const.POST_STATUS['private'] in title) - question = models.Thread.objects.get(id=1) - self.assertEqual(question.title, self.qdata['title']) - self.assertFalse(models.Group.objects.get_global_group() in set(question.groups.all())) - - #private question is not accessible to unauthorized users - self.client.logout() - response = self.client.get(question._question_post().get_absolute_url()) - self.assertEqual(response.status_code, 302) - self.assertEqual(response.content, '') - #private question link is not shown on the main page - #to unauthorized users - response = self.client.get(reverse('questions')) - self.assertFalse(self.qdata['title'] in response.content) - #private question link is not shown on the poster profile - #to the unauthorized users - response = self.client.get(self.user.get_profile_url()) - self.assertFalse(self.qdata['title'] in response.content) - - def test_publish_private_question(self): - question = self.post_question(user=self.user, is_private=True) - title = question.thread.get_title() - self.assertTrue(const.POST_STATUS['private'] in title) - data = self.qdata - #data['post_privately'] = 'false' - data['select_revision'] = 'false' - data['text'] = 'edited question text' - response1 = self.client.post( - reverse('edit_question', kwargs={'id':question.id}), - data=data - ) - response2 = self.client.get(question.get_absolute_url()) - dom = BeautifulSoup(response2.content) - title = dom.find('h1').text - self.assertTrue(models.Group.objects.get_global_group() in set(question.groups.all())) - self.assertEqual(title, self.qdata['title']) - - self.client.logout() - response = self.client.get(question.get_absolute_url()) - self.assertTrue('edited question text' in response.content) - - def test_privatize_public_question(self): - question = self.post_question(user=self.user) - title = question.thread.get_title() - self.assertFalse(const.POST_STATUS['private'] in title) - data = self.qdata - data['post_privately'] = 'checked' - data['select_revision'] = 'false' - response1 = self.client.post( - reverse('edit_question', kwargs={'id':question.id}), - data=data - ) - response2 = self.client.get(question.get_absolute_url()) - dom = BeautifulSoup(response2.content) - title = dom.find('h1').text - self.assertFalse(models.Group.objects.get_global_group() in set(question.groups.all())) - self.assertTrue(const.POST_STATUS['private'] in title) - - def test_private_checkbox_is_on_when_editing_private_question(self): - question = self.post_question(user=self.user, is_private=True) - response = self.client.get( - reverse('edit_question', kwargs={'id':question.id}) - ) - dom = BeautifulSoup(response.content) - checkbox = dom.find( - 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} - ) - self.assertEqual(checkbox['checked'], 'checked') - - def test_private_checkbox_is_off_when_editing_public_question(self): - question = self.post_question(user=self.user) - response = self.client.get( - reverse('edit_question', kwargs={'id':question.id}) - ) - dom = BeautifulSoup(response.content) - checkbox = dom.find( - 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} - ) - self.assertEqual(checkbox.get('checked', False), False) - - -class PrivateAnswerViewsTests(AskbotTestCase): - - def setUp(self): - self._backup = askbot_settings.GROUPS_ENABLED - askbot_settings.update('GROUPS_ENABLED', True) - self.user = self.create_user('user') - group = models.Group.objects.create( - name='the group', openness=models.Group.OPEN - ) - self.user.join_group(group) - self.question = self.post_question(user=self.user) - self.client.login(user_id=self.user.id, method='force') - - def tearDown(self): - askbot_settings.update('GROUPS_ENABLED', self._backup) - - def test_post_private_answer(self): - response1 = self.client.post( - reverse('answer', kwargs={'id': self.question.id}), - data={'text': 'some answer text', 'post_privately': 'checked'} - ) - answer = self.question.thread.get_answers(user=self.user)[0] - self.assertFalse(models.Group.objects.get_global_group() in set(answer.groups.all())) - self.client.logout() - - user2 = self.create_user('user2') - self.client.login(user_id=user2.id, method='force') - response = self.client.get(self.question.get_absolute_url()) - self.assertFalse('some answer text' in response.content) - - self.client.logout() - response = self.client.get(self.question.get_absolute_url()) - self.assertFalse('some answer text' in response.content) - - - def test_private_checkbox_is_on_when_editing_private_answer(self): - answer = self.post_answer( - question=self.question, user=self.user, is_private=True - ) - response = self.client.get( - reverse('edit_answer', kwargs={'id': answer.id}) - ) - dom = BeautifulSoup(response.content) - checkbox = dom.find( - 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} - ) - self.assertEqual(checkbox['checked'], 'checked') - - def test_privaet_checkbox_is_off_when_editing_public_answer(self): - answer = self.post_answer(question=self.question, user=self.user) - response = self.client.get( - reverse('edit_answer', kwargs={'id': answer.id}) - ) - dom = BeautifulSoup(response.content) - checkbox = dom.find( - 'input', attrs={'type': 'checkbox', 'name': 'post_privately'} - ) - self.assertEqual(checkbox.get('checked', False), False) - - def test_publish_private_answer(self): - answer = self.post_answer( - question=self.question, user=self.user, is_private=True - ) - self.client.post( - reverse('edit_answer', kwargs={'id': answer.id}), - data={'text': 'edited answer text', 'select_revision': 'false'} - ) - answer = self.reload_object(answer) - self.assertTrue(models.Group.objects.get_global_group() in answer.groups.all()) - self.client.logout() - response = self.client.get(self.question.get_absolute_url()) - self.assertTrue('edited answer text' in response.content) - - - def test_privatize_public_answer(self): - answer = self.post_answer(question=self.question, user=self.user) - self.client.post( - reverse('edit_answer', kwargs={'id': answer.id}), - data={ - 'text': 'edited answer text', - 'post_privately': 'checked', - 'select_revision': 'false' - } - ) - #check that answer is not visible to the "everyone" group - answer = self.reload_object(answer) - self.assertFalse(models.Group.objects.get_global_group() in answer.groups.all()) - #check that countent is not seen by an anonymous user - self.client.logout() - response = self.client.get(self.question.get_absolute_url()) - self.assertFalse('edited answer text' in response.content) -- cgit v1.2.3-1-g7c22 From 77e8d9ec9ca426c4ee8e5bb666572472635edbbe Mon Sep 17 00:00:00 2001 From: Evgeny Fadeev Date: Mon, 22 Oct 2012 17:46:02 -0300 Subject: cleaned up some remaining older group related functions --- askbot/forms.py | 8 ++++---- askbot/models/__init__.py | 5 +---- askbot/models/post.py | 2 +- askbot/models/question.py | 2 -- askbot/models/tag.py | 11 ++--------- askbot/tests/db_api_tests.py | 2 ++ askbot/views/users.py | 3 +-- 7 files changed, 11 insertions(+), 22 deletions(-) diff --git a/askbot/forms.py b/askbot/forms.py index 0659e338..1c5bc3d6 100644 --- a/askbot/forms.py +++ b/askbot/forms.py @@ -12,7 +12,6 @@ from django.contrib.auth.models import User from django_countries import countries from askbot.utils.forms import NextUrlField, UserNameField from askbot.mail import extract_first_email_address -from askbot.models.tag import get_groups from recaptcha_works.fields import RecaptchaField from askbot.conf import settings as askbot_settings from askbot.conf import get_tag_display_filter_strategy_choices @@ -958,10 +957,10 @@ class CreateAskWidgetForm(forms.Form, FormWithHideableFields): ) def __init__(self, *args, **kwargs): - from askbot.models import Tag + from askbot.models import Group, Tag super(CreateAskWidgetForm, self).__init__(*args, **kwargs) self.fields['group'] = forms.ModelChoiceField( - queryset=get_groups().exclude_personal(), + queryset=Group.objects.exclude_personal(), required=False ) self.fields['tag'] = forms.ModelChoiceField(queryset=Tag.objects.get_content_tags(), @@ -985,10 +984,11 @@ class CreateQuestionWidgetForm(forms.Form, FormWithHideableFields): ) def __init__(self, *args, **kwargs): + from askbot.models import Group super(CreateQuestionWidgetForm, self).__init__(*args, **kwargs) self.fields['tagnames'] = TagNamesField() self.fields['group'] = forms.ModelChoiceField( - queryset=get_groups().exclude(name__startswith='_internal'), + queryset=Group.objects.exclude(name__startswith='_internal'), required=False ) diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 9c9880b2..fc1e1f3c 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -41,7 +41,6 @@ from askbot.models.question import QuestionView, AnonymousQuestion from askbot.models.question import DraftQuestion from askbot.models.question import FavoriteQuestion from askbot.models.tag import Tag, MarkedTag -from askbot.models.tag import get_groups from askbot.models.tag import format_personal_group_name from askbot.models.user import EmailFeedSetting, ActivityAuditStatus, Activity from askbot.models.user import GroupMembership @@ -2261,7 +2260,7 @@ def user_get_foreign_groups(self): """returns a query set of groups to which user does not belong""" #todo: maybe cache this query user_group_ids = self.get_groups().values_list('id', flat = True) - return get_groups().exclude(id__in = user_group_ids) + return Group.objects.exclude(id__in = user_group_ids) def user_get_primary_group(self): """a temporary function - returns ether None or @@ -3657,6 +3656,4 @@ __all__ = [ 'ReplyAddress', 'get_model', - 'get_group_names', - 'get_groups' ] diff --git a/askbot/models/post.py b/askbot/models/post.py index 85628f55..36bc5037 100644 --- a/askbot/models/post.py +++ b/askbot/models/post.py @@ -30,7 +30,7 @@ from askbot.models.user import EmailFeedSetting from askbot.models.user import Group from askbot.models.user import GroupMembership from askbot.models.tag import Tag, MarkedTag -from askbot.models.tag import get_groups, tags_match_some_wildcard +from askbot.models.tag import tags_match_some_wildcard from askbot.conf import settings as askbot_settings from askbot import exceptions from askbot.utils import markup diff --git a/askbot/models/question.py b/askbot/models/question.py index 76411ffa..e3f9146b 100644 --- a/askbot/models/question.py +++ b/askbot/models/question.py @@ -17,12 +17,10 @@ from askbot.conf import settings as askbot_settings from askbot import mail from askbot.mail import messages from askbot.models.tag import Tag -from askbot.models.tag import get_groups from askbot.models.tag import get_tags_by_names from askbot.models.tag import filter_accepted_tags, filter_suggested_tags from askbot.models.tag import delete_tags, separate_unused_tags from askbot.models.base import DraftContent, BaseQuerySetManager -from askbot.models.tag import Tag, get_groups from askbot.models.post import Post, PostRevision from askbot.models.post import PostToGroup from askbot.models.user import Group, PERSONAL_GROUP_NAME_PREFIX diff --git a/askbot/models/tag.py b/askbot/models/tag.py index 0c029d27..d7e91eb5 100644 --- a/askbot/models/tag.py +++ b/askbot/models/tag.py @@ -262,7 +262,8 @@ class TagManager(BaseQuerySetManager): return created_tags def clean_group_name(name): - """group names allow spaces, + """todo: move to the models/user.py + group names allow spaces, tag names do not, so we use this method to replace spaces with dashes""" return re.sub('\s+', '-', name.strip()) @@ -317,11 +318,3 @@ class MarkedTag(models.Model): class Meta: app_label = 'askbot' - -def get_groups(): - from askbot.models import Group - return Group.objects.all() - -def get_group_names(): - #todo: cache me - return get_groups().values_list('name', flat = True) diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py index 0af6d955..232b847a 100644 --- a/askbot/tests/db_api_tests.py +++ b/askbot/tests/db_api_tests.py @@ -185,6 +185,8 @@ class DBApiTests(AskbotTestCase): self.assertTrue(saved_question.thread.answer_count == 1) def test_unused_tag_is_auto_deleted(self): + import pdb + pdb.set_trace() self.user.retag_question(self.question, tags='one-tag') tag = models.Tag.objects.get(name='one-tag') self.assertEquals(tag.used_count, 1) diff --git a/askbot/views/users.py b/askbot/views/users.py index b30e546d..b89e46cb 100644 --- a/askbot/views/users.py +++ b/askbot/views/users.py @@ -39,7 +39,6 @@ from askbot.conf import settings as askbot_settings from askbot import models from askbot import exceptions from askbot.models.badges import award_badges_signal -from askbot.models.tag import get_groups from askbot.models.tag import format_personal_group_name from askbot.skins.loaders import render_into_skin from askbot.search.state_manager import SearchState @@ -177,7 +176,7 @@ def show_users(request, by_group=False, group_id=None, group_slug=None): #extra context for the groups if askbot_settings.GROUPS_ENABLED: #todo: cleanup this branched code after groups are migrated to auth_group - user_groups = get_groups().exclude_personal() + user_groups = models.Group.objects.exclude_personal() if len(user_groups) <= 1: assert(user_groups[0].name == askbot_settings.GLOBAL_GROUP_NAME) user_groups = None -- cgit v1.2.3-1-g7c22