【问题标题】:Django TestCase for group permissions?组权限的Django TestCase?
【发布时间】:2020-03-31 18:08:40
【问题描述】:

我有一些视图的 TestCase,但我也在尝试为我的 post admin 组合并测试。他们拥有post.change_postpost.delete_post 的权限,就像用户一样。

这是一个小代码sn-p,

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() 方法中添加它?

【问题讨论】:

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


    【解决方案1】:

    我想我离这个 sn-p 越来越近了...

    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/'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      • 2016-07-10
      • 2017-10-16
      • 2019-04-25
      • 2020-11-04
      • 2022-01-23
      • 2012-10-05
      相关资源
      最近更新 更多