This commit is contained in:
Guilhem Saurel 2016-06-25 16:27:35 +02:00
parent 000878b9a3
commit ecb2c70245
6 changed files with 25 additions and 11 deletions

View File

@ -3,7 +3,7 @@ from django.contrib.auth.decorators import login_required
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from .forms import ProfileForm, UserForm, ParticipationForm from .forms import ParticipationForm, ProfileForm, UserForm
from .models import Participation from .models import Participation

View File

@ -95,7 +95,7 @@ class ConversationAboutTalk(Conversation):
return "Conversation about %s" % self.talk.title return "Conversation about %s" % self.talk.title
def get_absolute_url(self): def get_absolute_url(self):
self.talk.get_absolute_url() return self.talk.get_absolute_url()
def get_site(self): def get_site(self):
return self.talk.site return self.talk.site

View File

@ -4,20 +4,30 @@ from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase
from accounts.models import Participation from accounts.models import Participation
from proposals.models import Talk
from .models import ConversationWithParticipant, Message from .models import ConversationAboutTalk, ConversationWithParticipant, Message
class ConversationTests(TestCase): class ConversationTests(TestCase):
def setUp(self): def setUp(self):
a, b, c = (User.objects.create_user(guy, email='%s@example.org' % guy, password=guy) for guy in 'abc') a, b, c, d = (User.objects.create_user(guy, email='%s@example.org' % guy, password=guy) for guy in 'abcd')
d.is_superuser = True
d.save()
pa, _ = Participation.objects.get_or_create(user=a, site=Site.objects.first()) pa, _ = Participation.objects.get_or_create(user=a, site=Site.objects.first())
conversation, _ = ConversationWithParticipant.objects.get_or_create(participation=pa) conversation, _ = ConversationWithParticipant.objects.get_or_create(participation=pa)
Message.objects.create(content='allo', conversation=conversation, author=b) Message.objects.create(content='allo', conversation=conversation, author=b)
Message.objects.create(content='aluil', conversation=conversation, author=a)
Talk.objects.get_or_create(site=Site.objects.first(), proposer=a, title='a talk', description='yay')
def test_models(self): def test_models(self):
self.assertEqual(str(ConversationWithParticipant.objects.first()), 'Conversation with a') talk, participant, message = (model.objects.first() for model in
self.assertEqual(str(Message.objects.first()), 'Message from b') (ConversationAboutTalk, ConversationWithParticipant, Message))
self.assertEqual(str(talk), 'Conversation about a talk')
self.assertEqual(str(participant), 'Conversation with a')
self.assertEqual(str(message), 'Message from b')
self.assertEqual(message.get_absolute_url(), '/conversations/with/a/')
self.assertEqual(talk.get_absolute_url(), '/talk/details/a-talk')
def test_views(self): def test_views(self):
url = ConversationWithParticipant.objects.first().get_absolute_url() url = ConversationWithParticipant.objects.first().get_absolute_url()
@ -27,3 +37,6 @@ class ConversationTests(TestCase):
self.assertEqual(self.client.get(reverse('correspondents')).status_code, 200) self.assertEqual(self.client.get(reverse('correspondents')).status_code, 200)
self.assertEqual(self.client.get(reverse('inbox')).status_code, 200) self.assertEqual(self.client.get(reverse('inbox')).status_code, 200)
self.client.post(reverse('inbox'), {'content': 'coucou'}) self.client.post(reverse('inbox'), {'content': 'coucou'})
self.client.login(username='d', password='d')
self.client.post(url, {'content': 'im superuser'})
self.assertEqual(Message.objects.last().content, 'im superuser')

View File

@ -180,3 +180,4 @@ AUTHENTICATION_BACKENDS = ['yeouia.backends.YummyEmailOrUsernameInsensitiveAuth'
LOGOUT_REDIRECT_URL = 'home' LOGOUT_REDIRECT_URL = 'home'
ACCOUNT_ACTIVATION_DAYS = 7 # django-registration ACCOUNT_ACTIVATION_DAYS = 7 # django-registration
REPLY_EMAIL = 'no-reply@example.org'

View File

@ -21,14 +21,16 @@ class ProposalsTests(TestCase):
self.client.login(username='a', password='a') self.client.login(username='a', password='a')
self.client.post(reverse('add-talk'), {'title': 'super talk', 'description': 'super', 'event': 1, 'topics': 1}) self.client.post(reverse('add-talk'), {'title': 'super talk', 'description': 'super', 'event': 1, 'topics': 1})
self.assertEqual(str(Talk.on_site.first()), 'super talk') self.assertEqual(str(Talk.on_site.first()), 'super talk')
self.assertEqual(Talk.on_site.first().description, 'super')
self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}), self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
{'title': 'mega talk', 'description': 'mega', 'event': 1}) {'title': 'mega talk', 'description': 'mega', 'event': 1})
self.assertEqual(str(Talk.on_site.first()), 'mega talk') self.assertEqual(str(Talk.on_site.first()), 'super talk') # title is read only there
self.assertEqual(Talk.on_site.first().description, 'mega')
# Status Code # Status Code
self.client.login(username='a', password='a') self.client.login(username='a', password='a')
for view in ['home', 'list-talks', 'add-talk', 'list-topics', 'list-speakers']: for view in ['home', 'list-talks', 'add-talk', 'list-topics', 'list-speakers']:
self.assertEqual(self.client.get(reverse(view)).status_code, 200) self.assertEqual(self.client.get(reverse(view)).status_code, 302 if view == 'list-speakers' else 200)
talk = Talk.on_site.first() talk = Talk.on_site.first()
self.assertEqual(self.client.get(reverse('edit-talk', kwargs={'talk': talk.slug})).status_code, 200) self.assertEqual(self.client.get(reverse('edit-talk', kwargs={'talk': talk.slug})).status_code, 200)
self.assertEqual(self.client.get(reverse('show-talk', kwargs={'slug': talk.slug})).status_code, 200) self.assertEqual(self.client.get(reverse('show-talk', kwargs={'slug': talk.slug})).status_code, 200)

View File

@ -49,9 +49,7 @@ def talk_list_by_speaker(request, speaker):
@login_required @login_required
def talk_edit(request, talk=None): def talk_edit(request, talk=None):
if talk: if talk:
talk = get_object_or_404(Talk, slug=talk) talk = get_object_or_404(Talk, slug=talk, site=get_current_site(request))
if talk.site != get_current_site(request):
raise PermissionDenied()
if not talk.is_editable_by(request.user): if not talk.is_editable_by(request.user):
raise PermissionDenied() raise PermissionDenied()
form = TalkForm(request.POST or None, instance=talk) form = TalkForm(request.POST or None, instance=talk)