django-admin2/example/blog/tests/test_views.py

238 lines
10 KiB
Python
Raw Normal View History

2013-05-19 07:59:28 +00:00
from django.contrib.auth import get_user_model
from django.core.urlresolvers import reverse
from django.test import TestCase, Client
2013-05-18 10:12:57 +00:00
2013-05-22 00:22:39 +00:00
from ..models import Post, Comment
2013-05-18 10:12:57 +00:00
2013-05-19 07:59:28 +00:00
class BaseIntegrationTest(TestCase):
"""
Base TestCase for integration tests.
"""
def setUp(self):
self.client = Client()
self.user = get_user_model()(username='user', is_staff=True,
is_superuser=True)
self.user.set_password("password")
self.user.save()
self.client.login(username='user', password='password')
2013-05-18 10:12:57 +00:00
2013-05-19 07:59:28 +00:00
class AdminIndexTest(BaseIntegrationTest):
def test_view_ok(self):
response = self.client.get(reverse("admin2:dashboard"))
self.assertContains(response, reverse("admin2:blog_post_index"))
2013-05-19 07:59:28 +00:00
class PostListTest(BaseIntegrationTest):
def test_view_ok(self):
post = Post.objects.create(title="a_post_title", body="body")
response = self.client.get(reverse("admin2:blog_post_index"))
self.assertContains(response, post.title)
def test_actions_displayed(self):
response = self.client.get(reverse("admin2:blog_post_index"))
2013-06-02 19:09:04 +00:00
self.assertInHTML('<a tabindex="-1" href="#" data-name="action" data-value="DeleteSelectedAction">Delete selected items</a>', response.content)
def test_delete_selected_post(self):
post = Post.objects.create(title="a_post_title", body="body")
params = {'action': 'DeleteSelectedAction', 'selected_model_pk': str(post.pk)}
response = self.client.post(reverse("admin2:blog_post_index"), params)
self.assertInHTML('<p>Are you sure you want to delete the selected post? All of the following items will be deleted:</p>', response.content)
def test_delete_selected_post_confirmation(self):
post = Post.objects.create(title="a_post_title", body="body")
params = {'action': 'DeleteSelectedAction', 'selected_model_pk': str(post.pk), 'confirmed': 'yes'}
response = self.client.post(reverse("admin2:blog_post_index"), params)
self.assertRedirects(response, reverse("admin2:blog_post_index"))
def test_delete_selected_post_none_selected(self):
2013-06-04 09:35:47 +00:00
Post.objects.create(title="a_post_title", body="body")
params = {'action': 'DeleteSelectedAction'}
2013-06-04 09:35:47 +00:00
response = self.client.post(reverse("admin2:blog_post_index"), params, follow=True)
self.assertContains(response, "Items must be selected in order to perform actions on them. No items have been changed.")
2013-05-19 07:59:28 +00:00
class PostDetailViewTest(BaseIntegrationTest):
def test_view_ok(self):
post = Post.objects.create(title="a_post_title", body="body")
response = self.client.get(reverse("admin2:blog_post_detail",
args=(post.pk, )))
self.assertContains(response, post.title)
2013-05-19 07:59:28 +00:00
class PostCreateViewTest(BaseIntegrationTest):
def test_view_ok(self):
response = self.client.get(reverse("admin2:blog_post_create"))
self.assertEqual(response.status_code, 200)
2013-05-19 07:59:28 +00:00
def test_create_post(self):
2013-05-22 00:22:39 +00:00
post_data = {
"comment_set-TOTAL_FORMS": u'2',
"comment_set-INITIAL_FORMS": u'0',
"comment_set-MAX_NUM_FORMS": u'',
"comment_set-0-body": u'Comment Body',
"title": "a_post_title",
"body": "a_post_body",
}
2013-05-23 17:30:15 +00:00
2013-05-19 07:59:28 +00:00
response = self.client.post(reverse("admin2:blog_post_create"),
2013-05-22 00:22:39 +00:00
post_data,
2013-05-19 07:59:28 +00:00
follow=True)
self.assertTrue(Post.objects.filter(title="a_post_title").exists())
2013-05-23 17:30:15 +00:00
Post.objects.get(title="a_post_title")
Comment.objects.get(body="Comment Body")
self.assertRedirects(response, reverse("admin2:blog_post_index"))
def test_save_and_add_another_redirects_to_create(self):
"""
2013-05-23 17:30:15 +00:00
Tests that choosing 'Save and add another' from the model create
page redirects the user to the model create page.
"""
2013-05-22 00:22:39 +00:00
post_data = {
"comment_set-TOTAL_FORMS": u'2',
"comment_set-INITIAL_FORMS": u'0',
"comment_set-MAX_NUM_FORMS": u'',
"title": "a_post_title",
"body": "a_post_body",
"_addanother": ""
}
self.client.login(username='admin', password='password')
response = self.client.post(reverse("admin2:blog_post_create"),
post_data)
2013-05-23 17:30:15 +00:00
Post.objects.get(title='a_post_title')
self.assertRedirects(response, reverse("admin2:blog_post_create"))
def test_save_and_continue_editing_redirects_to_update(self):
"""
2013-05-23 17:30:15 +00:00
Tests that choosing "Save and continue editing" redirects
the user to the model update form.
"""
2013-05-22 00:22:39 +00:00
post_data = {
"comment_set-TOTAL_FORMS": u'2',
"comment_set-INITIAL_FORMS": u'0',
"comment_set-MAX_NUM_FORMS": u'',
"title": "Unique",
"body": "a_post_body",
"_continue": ""
}
response = self.client.post(reverse("admin2:blog_post_create"),
post_data)
post = Post.objects.get(title="Unique")
self.assertRedirects(response, reverse("admin2:blog_post_update",
args=(post.pk, )))
2013-05-19 07:59:28 +00:00
class PostDeleteViewTest(BaseIntegrationTest):
def test_view_ok(self):
post = Post.objects.create(title="a_post_title", body="body")
response = self.client.get(reverse("admin2:blog_post_delete",
args=(post.pk, )))
self.assertContains(response, post.title)
2013-05-19 07:59:28 +00:00
def test_delete_post(self):
post = Post.objects.create(title="a_post_title", body="body")
response = self.client.post(reverse("admin2:blog_post_delete",
args=(post.pk, )))
self.assertRedirects(response, reverse("admin2:blog_post_index"))
self.assertFalse(Post.objects.filter(pk=post.pk).exists())
class PostDeleteActionTest(BaseIntegrationTest):
"""
Tests the behaviour of the 'Delete selected items' action.
"""
def test_confirmation_page(self):
p1 = Post.objects.create(title="A Post Title", body="body")
p2 = Post.objects.create(title="A Post Title", body="body")
post_data = {
'action': 'DeleteSelectedAction',
'selected_model_pk': [p1.pk, p2.pk]
}
response = self.client.post(reverse("admin2:blog_post_index"),
post_data)
self.assertContains(response, p1.title)
self.assertContains(response, p2.title)
def test_results_page(self):
p1 = Post.objects.create(title="A Post Title", body="body")
p2 = Post.objects.create(title="A Post Title", body="body")
post_data = {
'action': 'DeleteSelectedAction',
'selected_model_pk': [p1.pk, p2.pk],
'confirmed': 'yes'
}
response = self.client.post(reverse("admin2:blog_post_index"),
post_data, follow=True)
2013-06-04 09:35:47 +00:00
self.assertContains(response, "Successfully deleted 2 post")
2013-05-31 01:21:43 +00:00
class TestAuthViews(TestCase):
def setUp(self):
self.client = Client()
self.user = get_user_model()(username='user', is_staff=True,
is_superuser=True)
self.user.set_password("password")
self.user.save()
def test_login_required_redirect_to_index(self):
index_path = reverse('admin2:dashboard') + '?next=/admin2/blog/post/'
target_path = reverse('admin2:blog_post_index')
self.assertRedirects(self.client.get(target_path), index_path)
def test_login_required_logined_successful(self):
index_path = reverse('admin2:dashboard')
self.client.login(username=self.user.username,
password='password')
self.assertContains(self.client.get(index_path),
reverse('admin2:blog_post_index'))
def test_change_password_for_myself(self):
self.client.login(username=self.user.username,
password='password')
2013-05-31 01:25:45 +00:00
request = self.client.post(reverse('admin2:password_change',
2013-05-31 01:21:43 +00:00
kwargs={'pk': self.user.pk}),
{'old_password': 'password',
'new_password1': 'user',
'new_password2': 'user'})
2013-05-31 01:25:45 +00:00
self.assertRedirects(request, reverse('admin2:password_change_done'))
2013-05-31 01:21:43 +00:00
self.client.logout()
self.assertFalse(self.client.login(username=self.user.username,
password='password'))
self.assertTrue(self.client.login(username=self.user.username,
password='user'))
def test_change_password(self):
self.client.login(username=self.user.username,
password='password')
new_user = get_user_model()(username='new_user')
new_user.set_password("new_user")
new_user.save()
2013-05-31 01:25:45 +00:00
request = self.client.post(reverse('admin2:password_change',
2013-05-31 01:21:43 +00:00
kwargs={'pk': new_user.pk}),
{'old_password': 'new_user',
'password1': 'new_user_password',
'password2': 'new_user_password'})
2013-05-31 01:25:45 +00:00
self.assertRedirects(request, reverse('admin2:password_change_done'))
2013-05-31 01:21:43 +00:00
self.client.logout()
self.assertFalse(self.client.login(username=new_user.username,
password='new_user'))
self.assertTrue(self.client.login(username=new_user.username,
password='new_user_password'))
def test_logout(self):
self.client.login(username=self.user.username,
password='password')
logout_path = reverse('admin2:logout')
request = self.client.get(logout_path)
self.assertContains(request, 'Log in again')
index_path = reverse('admin2:dashboard') + '?next=/admin2/blog/post/'
target_path = reverse('admin2:blog_post_index')
self.assertRedirects(self.client.get(target_path), index_path)