topics, tests

This commit is contained in:
Guilhem Saurel 2016-06-12 21:09:52 +02:00
parent de72b6b167
commit 607e44e861
11 changed files with 47 additions and 25 deletions

View File

@ -3,6 +3,7 @@ from enum import IntEnum
from django.contrib.auth.models import User
from django.contrib.sites.managers import CurrentSiteManager
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse
from django.db import models
__all__ = ['Profile', 'Speaker']
@ -17,6 +18,12 @@ class Profile(models.Model):
user = models.OneToOneField(User)
biography = models.TextField(blank=True, verbose_name='Biography')
def __str__(self):
return self.user.get_full_name() or self.user.username
def get_absolute_url(self):
return reverse('profile')
class Speaker(models.Model):
@ -39,7 +46,10 @@ class Speaker(models.Model):
unique_together = ('site', 'user')
def __str__(self):
return self.user.get_full_name() or self.user.username
return str(self.user.profile)
def get_absolute_url(self):
return reverse('show-speaker', kwargs={'username': self.user.username})
def create_profile(sender, instance, created, **kwargs):

View File

@ -1,8 +1,9 @@
from django.contrib.auth.models import User
from django.contrib.sites.models import Site
from django.core.urlresolvers import reverse
from django.test import TestCase
from .models import Profile
from .models import Profile, Speaker
ROOT_URL = 'accounts'
@ -11,15 +12,17 @@ class AccountTests(TestCase):
def setUp(self):
for guy in 'ab':
User.objects.create_user(guy, email='%s@example.org' % guy, password=guy)
Speaker.objects.create(user=User.objects.first(), site=Site.objects.first())
# MODELS
def test_create_profile(self):
def test_models(self):
self.assertEqual(Profile.objects.count(), 2)
self.client.login(username='b', password='b')
for model in [Profile, Speaker]:
item = model.objects.first()
self.assertEqual(self.client.get(item.get_absolute_url()).status_code, 200)
self.assertTrue(str(item))
# VIEWS
def test_profile(self):
def test_views(self):
# User b wants to update its username, email and biography
user = User.objects.get(username='b')
self.assertEqual(user.email, 'b@example.org')

View File

@ -5,4 +5,4 @@ from proposals.models import Talk
__all__ = ['TalkForm']
TalkForm = modelform_factory(Talk, fields=['title', 'description'])
TalkForm = modelform_factory(Talk, fields=['title', 'description', 'topics'])

View File

@ -18,7 +18,7 @@ class Topic(models.Model):
return self.name
def get_absolute_url(self):
return reverse('list-talks-by-topic', kwargs={'slug': self.slug})
return reverse('list-talks-by-topic', kwargs={'topic': self.slug})
class Talk(models.Model):

View File

@ -7,8 +7,8 @@
<h1>Speakers:</h1>
<ul>
{% for speaker in speakers %}
<li><a href="{% url 'list-speakers' %}">{{ speaker }}</a></li>
{% for speaker in user_list %}
<li><a href="{% url 'show-speaker' username=speaker.username %}">{{ speaker }}</a></li>
{% empty %}
<li><i>No speakers.</i></li>
{% endfor %}

View File

@ -16,7 +16,7 @@
<ul>
{% for speaker in talk.speakers.all %}
<li><a href="{% url 'show-user' speaker.username %}">{{ speaker }}</a></li>
<li><a href="{% url 'show-speaker' speaker.username %}">{{ speaker }}</a></li>
{% empty %}
<li><i>No speaker.</i></li>
{% endfor %}

View File

@ -7,12 +7,12 @@
<h1>{{ title }}</h1>
<ul>
{% for talk in talks %}
{% for talk in talk_list %}
<li>
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
<i>by</i>
{% for speach in talk.speach_set.all %}
<a href="{% url 'show-user' speach.username %}">{{ speach.user }}</a>
{% for speaker in talk.speakers.all %}
<a href="{% url 'show-speaker' speaker.username %}">{{ speaker }}</a>
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
{% endfor %}
</li>

View File

@ -13,8 +13,8 @@
<li>
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
<i>by</i>
{% for speach in talk.speach_set.all %}
<a href="{% url 'show-user' speach.username %}">{{ speach.user }}</a>
{% for speaker in talk.speakers.all %}
<a href="{% url 'show-speaker' speaker.username %}">{{ speaker }}</a>
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
{% endfor %}
<a class="btn btn-primary" href="{% url 'edit-talk' talk.slug %}">edit</a>
@ -32,7 +32,7 @@
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
<i>by</i>
{% for speach in talk.speach_set.all %}
<a href="{% url 'show-user' speach.username %}">{{ speach.user }}</a>
<a href="{% url 'show-speaker' speach.username %}">{{ speach.user }}</a>
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
{% endfor %}
</li>

View File

@ -2,15 +2,16 @@ from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.test import TestCase
from .models import Talk
from .models import Talk, Topic, Speach
class ProposalsTests(TestCase):
def setUp(self):
for guy in 'ab':
User.objects.create_user(guy, email='%s@example.org' % guy, password=guy)
Topic.objects.create(name='pipo')
def test_views(self):
def test_everything(self):
# talk-edit
self.client.login(username='a', password='a')
self.client.post(reverse('add-talk'), {'title': 'super talk', 'description': 'super'})
@ -27,9 +28,15 @@ class ProposalsTests(TestCase):
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('list-talks-by-speaker', kwargs={'speaker': 'a'})).status_code, 200)
self.assertEqual(self.client.get(reverse('show-user', kwargs={'username': 'a'})).status_code, 200)
self.assertEqual(self.client.get(reverse('show-speaker', kwargs={'username': 'a'})).status_code, 200)
self.client.login(username='b', password='b')
self.assertEqual(self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
{'title': 'mega talk', 'description': 'mega'}).status_code, 403)
self.assertEqual(self.client.get(reverse('list-talks')).status_code, 200)
# Models str & get_asbolute_url
for model in [Talk, Topic, Speach]:
item = model.objects.first()
self.assertEqual(self.client.get(item.get_absolute_url()).status_code, 200)
self.assertTrue(str(item))

View File

@ -12,5 +12,5 @@ urlpatterns = [
url(r'^talk/by-speaker/(?P<speaker>[\w.@+-]+)$', views.talk_list_by_speaker, name='list-talks-by-speaker'),
url(r'^topic/$', views.TopicList.as_view(), name='list-topics'),
url(r'^speakers/$', views.SpeakerList.as_view(), name='list-speakers'),
url(r'^user/(?P<username>[\w.@+-]+)$', views.user_details, name='show-user'),
url(r'^speaker/(?P<username>[\w.@+-]+)$', views.user_details, name='show-speaker'),
]

View File

@ -29,7 +29,7 @@ def talk_list_by_topic(request, topic):
topic = get_object_or_404(Topic, slug=topic)
return render(request, 'proposals/talk_list.html', {
'title': 'Talks related to %s:' % topic,
'talks': Talk.on_site.filter(topics=topic),
'talk_list': Talk.on_site.filter(topics=topic),
})
@ -38,7 +38,7 @@ def talk_list_by_speaker(request, speaker):
speaker = get_object_or_404(User, username=speaker)
return render(request, 'proposals/talk_list.html', {
'title': 'Talks with %s:' % speaker,
'talks': Talk.on_site.filter(speakers=speaker),
'talk_list': Talk.on_site.filter(speakers=speaker),
})
@ -61,6 +61,7 @@ def talk_edit(request, talk=None):
talk = form.save(commit=False)
talk.site = site
talk.save()
form.save_m2m()
Speaker.on_site.get_or_create(user=request.user, site=site)
Speach.objects.create(speaker=request.user, talk=talk)
messages.success(request, 'Talk proposed successfully!')
@ -80,6 +81,7 @@ class TopicList(LoginRequiredMixin, ListView):
class SpeakerList(LoginRequiredMixin, ListView):
queryset = User.objects.filter(speach__talk=Talk.on_site.all())
template_name = 'proposals/speaker_list.html'
@login_required