tests
This commit is contained in:
parent
a07715a7d4
commit
16f75ae262
|
@ -38,6 +38,10 @@ class PonyConfSpeaker(models.Model):
|
|||
class Meta:
|
||||
unique_together = ('site', 'user')
|
||||
|
||||
def __str__(self):
|
||||
user = self.user.user
|
||||
return user.get_full_name() or user.username
|
||||
|
||||
|
||||
def create_ponyconfuser(sender, instance, created, **kwargs):
|
||||
if created:
|
||||
|
|
|
@ -1,3 +1,43 @@
|
|||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
# Create your tests here.
|
||||
from .models import PonyConfSpeaker, PonyConfUser
|
||||
|
||||
|
||||
ROOT_URL = 'accounts'
|
||||
|
||||
|
||||
class AccountTests(TestCase):
|
||||
def setUp(self):
|
||||
for guy in 'ab':
|
||||
User.objects.create_user(guy, email='%s@example.org' % guy, password=guy)
|
||||
|
||||
# MODELS
|
||||
|
||||
def test_create_ponyconfuser(self):
|
||||
self.assertEqual(PonyConfUser.objects.count(), 2)
|
||||
|
||||
# VIEWS
|
||||
|
||||
def test_password(self):
|
||||
self.client.login(username='a', password='a')
|
||||
self.assertEqual(self.client.get(reverse('password')).status_code, 200)
|
||||
|
||||
def test_profile(self):
|
||||
# User b wants to update its username, email and biography
|
||||
user = User.objects.get(username='b')
|
||||
self.assertEqual(user.email, 'b@example.org')
|
||||
self.assertEqual(user.ponyconfuser.biography, '')
|
||||
|
||||
self.client.login(username='b', password='b')
|
||||
|
||||
# He tries with an invalid address
|
||||
r = self.client.post(reverse('profile'), {'email': 'bnewdomain.com', 'username': 'z', 'biography': 'tester'})
|
||||
self.assertEqual(User.objects.filter(username='z').count(), 0)
|
||||
|
||||
r = self.client.post(reverse('profile'), {'email': 'b@newdomain.com', 'username': 'z', 'biography': 'tester'})
|
||||
|
||||
user = User.objects.get(username='z')
|
||||
self.assertEqual(user.email, 'b@newdomain.com')
|
||||
self.assertEqual(user.ponyconfuser.biography, 'tester')
|
||||
|
|
|
@ -6,5 +6,6 @@ from accounts import views
|
|||
urlpatterns = [
|
||||
url(r'^login/$', auth_views.login, {'template_name': 'accounts/login.html'}, name='login'),
|
||||
url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),
|
||||
url(r'^profile/$', views.profile, name='profile'),
|
||||
url(r'^profile$', views.profile, name='profile'),
|
||||
url(r'^password$', views.password, name='password'),
|
||||
]
|
||||
|
|
|
@ -55,4 +55,7 @@ class Speach(models.Model):
|
|||
)
|
||||
|
||||
def __str__(self):
|
||||
return self.user.username + ' speaking at ' + self.talk.title + ' in position %d' % self.order
|
||||
return '%s speaking at %s in position %d' % (self.user, self.talk, self.order)
|
||||
|
||||
def username(self):
|
||||
return self.user.user.user.username
|
||||
|
|
|
@ -8,9 +8,7 @@
|
|||
|
||||
<ul>
|
||||
{% for speaker in speakers %}
|
||||
<li>
|
||||
<a href="{% url 'list-speakers' %}">{% firstof speaker.get_full_name speaker.username %}</a>
|
||||
</li>
|
||||
<li><a href="{% url 'list-speakers' %}">{{ speaker }}</a></li>
|
||||
{% empty %}
|
||||
<li><i>No speakers.</i></li>
|
||||
{% endfor %}
|
||||
|
|
|
@ -16,11 +16,7 @@
|
|||
|
||||
<ul>
|
||||
{% for speaker in talk.speakers.all %}
|
||||
<li>
|
||||
<a href="{% url 'show-user' speaker.user.user.username %}">
|
||||
{% firstof speaker.get_full_name speaker.username %}
|
||||
</a>
|
||||
</li>
|
||||
<li><a href="{% url 'show-user' speaker.user.user.username %}">{{ speaker }}</a></li>
|
||||
{% empty %}
|
||||
<li><i>No speaker.</i></li>
|
||||
{% endfor %}
|
||||
|
|
|
@ -12,7 +12,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.user.username %}">{% firstof speach.user.get_full_name speach.user.username %}</a>
|
||||
<a href="{% url 'show-user' speach.username %}">{{ speach.user }}</a>
|
||||
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
</li>
|
||||
|
|
|
@ -14,7 +14,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.user.user.user.username %}">{% firstof speach.user.user.user.get_full_name speach.user.user.user.username %}</a>
|
||||
<a href="{% url 'show-user' speach.username %}">{{ speach.user }}</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.user.username %}">{% firstof speach.user.get_full_name speach.user.username %}</a>
|
||||
<a href="{% url 'show-user' speach.username %}">{{ speach.user }}</a>
|
||||
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
</li>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{% block content %}
|
||||
|
||||
<h1>{% firstof user.get_full_name user.username %}</h1>
|
||||
<h1>{{ user }}</h1>
|
||||
|
||||
<b>Biography:</b>
|
||||
<p>{{ user.biography }}</p>
|
||||
|
|
|
@ -1,3 +1,37 @@
|
|||
from django.test import TestCase
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import reverse
|
||||
|
||||
# Create your tests here.
|
||||
from accounts.models import PonyConfSpeaker
|
||||
from .models import Topic, Talk, Speach
|
||||
|
||||
|
||||
class ProposalsTests(TestCase):
|
||||
def setUp(self):
|
||||
for guy in 'ab':
|
||||
User.objects.create_user(guy, email='%s@example.org' % guy, password=guy)
|
||||
|
||||
def test_views(self):
|
||||
# talk-edit
|
||||
self.client.login(username='a', password='a')
|
||||
self.client.post(reverse('add-talk'), {'title': 'super talk', 'description': 'super'})
|
||||
self.assertEqual(str(Talk.on_site.first()), 'super talk')
|
||||
self.client.post(reverse('edit-talk', kwargs={'talk': 'super-talk'}),
|
||||
{'title': 'mega talk', 'description': 'mega'})
|
||||
self.assertEqual(str(Talk.on_site.first()), 'mega talk')
|
||||
|
||||
# Status Code
|
||||
self.client.login(username='a', password='a')
|
||||
for view in ['home', 'list-talks', 'add-talk', 'list-topics', 'list-speakers']:
|
||||
self.assertEqual(self.client.get(reverse(view)).status_code, 200)
|
||||
talk = Talk.on_site.first()
|
||||
for view in ['edit-talk', 'show-talk']:
|
||||
self.assertEqual(self.client.get(reverse(view, kwargs={'talk': 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.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)
|
||||
|
|
|
@ -44,7 +44,7 @@ def talk_list_by_speaker(request, speaker):
|
|||
speaker = get_object_or_404(PonyConfSpeaker, user__user__username=speaker)
|
||||
talks = Talk.on_site.filter(speakers=speaker)
|
||||
return render(request, 'proposals/talk_list.html', {
|
||||
'title': 'Talks with %s:' % (speaker.get_full_name() or speaker.username),
|
||||
'title': 'Talks with %s:' % speaker,
|
||||
'talks': talks,
|
||||
})
|
||||
|
||||
|
@ -55,7 +55,8 @@ def talk_edit(request, talk=None):
|
|||
talk = get_object_or_404(Talk, slug=talk)
|
||||
if talk.site != get_current_site(request):
|
||||
raise PermissionDenied()
|
||||
if not request.user.is_superuser and not talk.speakers.filter(username=request.user.username).exists():
|
||||
user = PonyConfUser.objects.get(user=request.user)
|
||||
if not request.user.is_superuser and not talk.speakers.filter(user=user).exists():
|
||||
# FIXME fine permissions
|
||||
raise PermissionDenied()
|
||||
form = TalkForm(request.POST or None, instance=talk)
|
||||
|
|
Loading…
Reference in New Issue