Django TestCase是否具有组权限?

时间:2019-12-06 18:16:57

标签: python django unit-testing django-testing django-tests

对于某些视图,我有一个TestCase,但是我也试图为我的post admin组合并测试。他们具有post.change_postpost.delete_post的权限,就像用户可以的一样。

这是一个小代码段,

from django.contrib.auth import get_user_model
from django.test import TestCase, Client
from django.urls import reverse
from fixtureless.factory import create

from .models import Post


class TestPostViews(TestCase):

    def setUp(self):
        super().setUp()
        self.user = get_user_model().objects.create(username='test_user')
        self.form = create(Post, {'title': 'test_title'})
        self.client = Client()


    def test_update_post(self):
        """
        Test UpdateView updates users post
        """
        self.client.force_login(user=self.user)
        response = self.client.put(reverse('post:update', kwargs={'pk': self.form.pk}),
                                   {'title': 'testing'})
        self.assertEqual(response.status_code, 200)

        # reloads a models value from the database
        self.form.refresh_from_db()
        self.assertEqual(self.form.title, 'test_title')

    def test_delete_confirm_page(self):
        """
        Test DeleteView takes user to confirmation page
        """
        self.client.force_login(user=self.user)
        response = self.client.get(reverse('post:delete', kwargs={'pk': self.form.pk}))
        self.assertContains(response, 'delete')

    def test_delete_post(self):
        """
        Test DeleteView deletes a post
        """
        self.client.force_login(user=self.user)
        response = self.client.post(reverse('post:delete', kwargs={'pk': self.form.pk}))
        self.assertRedirects(response, reverse('post:list'))
        self.assertFalse(Post.objects.filter(pk=self.form.pk).exists())

对此有任何提示吗?我应该为post admin创建一个单独的TestCase,还是可以在初始setUp()方法中添加它?

1 个答案:

答案 0 :(得分:0)

我想我与这个片段越来越近了...

class TestPostViews(TestCase):

    def setUp(self):
        super().setUp()
        self.user1 = get_user_model().objects.create(username='test_user1')
        self.user2 = get_user_model().objects.create(username='test_user2', 
                     password='test_pw')
        self.form = create(Post, {'user': self.user1, 'title': 'test_title'})
        self.client = Client()

        # Group setup
        group_name = "post admin"
        self.group = Group(name=group_name)
        self.group.save()

    def test_admin_can_delete(self):
        self.user2.groups.add(self.group)
        self.user2.save()
        self.client.login(username='test_user2', password='test_pw')

        response = self.client.post(reverse('posts:delete', kwargs={'pk': self.form.pk}))
        self.assertRedirects(response, reverse('posts:list'))

仍然出现错误

Failure
Expected :'/accounts/login/?next=%2Fpost%2Fdelete%2F2143257160%2F'
Actual   :'/post/list/'