tests
This commit is contained in:
parent
a07715a7d4
commit
16f75ae262
|
@ -38,6 +38,10 @@ class PonyConfSpeaker(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('site', 'user')
|
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):
|
def create_ponyconfuser(sender, instance, created, **kwargs):
|
||||||
if created:
|
if created:
|
||||||
|
|
|
@ -1,3 +1,43 @@
|
||||||
from django.test import TestCase
|
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 = [
|
urlpatterns = [
|
||||||
url(r'^login/$', auth_views.login, {'template_name': 'accounts/login.html'}, name='login'),
|
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'^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):
|
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>
|
<ul>
|
||||||
{% for speaker in speakers %}
|
{% for speaker in speakers %}
|
||||||
<li>
|
<li><a href="{% url 'list-speakers' %}">{{ speaker }}</a></li>
|
||||||
<a href="{% url 'list-speakers' %}">{% firstof speaker.get_full_name speaker.username %}</a>
|
|
||||||
</li>
|
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li><i>No speakers.</i></li>
|
<li><i>No speakers.</i></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -16,11 +16,7 @@
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for speaker in talk.speakers.all %}
|
{% for speaker in talk.speakers.all %}
|
||||||
<li>
|
<li><a href="{% url 'show-user' speaker.user.user.username %}">{{ speaker }}</a></li>
|
||||||
<a href="{% url 'show-user' speaker.user.user.username %}">
|
|
||||||
{% firstof speaker.get_full_name speaker.username %}
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li><i>No speaker.</i></li>
|
<li><i>No speaker.</i></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
|
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
|
||||||
<i>by</i>
|
<i>by</i>
|
||||||
{% for speach in talk.speach_set.all %}
|
{% 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 %}
|
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
|
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
|
||||||
<i>by</i>
|
<i>by</i>
|
||||||
{% for speach in talk.speach_set.all %}
|
{% 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 %}
|
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<a class="btn btn-primary" href="{% url 'edit-talk' talk.slug %}">edit</a>
|
<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>
|
<a href="{% url 'show-talk' talk.slug %}">{{ talk }}</a>
|
||||||
<i>by</i>
|
<i>by</i>
|
||||||
{% for speach in talk.speach_set.all %}
|
{% 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 %}
|
{% if forloop.revcounter == 2 %} and {% elif not forloop.last %}, {% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<h1>{% firstof user.get_full_name user.username %}</h1>
|
<h1>{{ user }}</h1>
|
||||||
|
|
||||||
<b>Biography:</b>
|
<b>Biography:</b>
|
||||||
<p>{{ user.biography }}</p>
|
<p>{{ user.biography }}</p>
|
||||||
|
|
|
@ -1,3 +1,37 @@
|
||||||
from django.test import TestCase
|
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)
|
speaker = get_object_or_404(PonyConfSpeaker, user__user__username=speaker)
|
||||||
talks = Talk.on_site.filter(speakers=speaker)
|
talks = Talk.on_site.filter(speakers=speaker)
|
||||||
return render(request, 'proposals/talk_list.html', {
|
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,
|
'talks': talks,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -55,7 +55,8 @@ def talk_edit(request, talk=None):
|
||||||
talk = get_object_or_404(Talk, slug=talk)
|
talk = get_object_or_404(Talk, slug=talk)
|
||||||
if talk.site != get_current_site(request):
|
if talk.site != get_current_site(request):
|
||||||
raise PermissionDenied()
|
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
|
# FIXME fine permissions
|
||||||
raise PermissionDenied()
|
raise PermissionDenied()
|
||||||
form = TalkForm(request.POST or None, instance=talk)
|
form = TalkForm(request.POST or None, instance=talk)
|
||||||
|
|
Loading…
Reference in New Issue