topics, tests
This commit is contained in:
parent
de72b6b167
commit
607e44e861
|
@ -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):
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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'])
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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 %}
|
|
@ -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 %}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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'),
|
||||
]
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue