Django:http_permissions干扰了测试

时间:2017-09-25 13:15:06

标签: python django testing

我有一个列表记录的视图。如果我已经登录,我可以毫无问题地访问它。如果还没有登录并尝试访问该页面,我会被重定向到登录页面。到目前为止一切都很好!

但是在我的测试中我遇到了以下问题:我能够成功登录,但是当我尝试执行get来列出记录时,我得到403(权限被拒绝)和302(重定向,可能登录页)。我不明白发生了什么。我知道http_permissions正在干扰测试,因为我已经评论了http_permissions并且测试通过了。我是否必须将此http_permissions授予测试用户?任何人都可以对此有所了解吗?这是我的代码:

teleconsultoria / models.py

...
class Bibliografia(BaseModel):
    ativa = models.BooleanField(u'Ativa', default=True)
    link = models.CharField(u'Link', blank=True, max_length=2000,)
    nome = models.CharField(u'Nome', blank=False, max_length=255,)
    arquivo = SizeRestrictedFileField(
        u'PDF da Bibliografia', upload_to='bibliografia', blank=True, null=True,
    )   

    class Meta:
        verbose_name = u'Bibliografia'
        verbose_name_plural = u'Bibliografias'
        permissions = ( 
            ('ver_bibliografia', u'Pode ver bibliografia'),
            ('criar_bibliografia', u'Pode criar bibliografia'),
            ('alterar_bibliografia', u'Pode alterar bibliografia'),
            ('excluir_bibliografia', u'Pode excluir bibliografia'),
        )
...

teleconsultoria / views.py

...
class BibliografiaListView(ModelListView):                                                                    
    model = Bibliografia                                                                                      
    app_name = 'teleconsultoria'                                                                              
    table = BibliografiaTable                                                                                 
    search_fields = ('id', 'ativa', 'nome', 'link')                                                           
    http_permissions = ('teleconsultoria.ver_bibliografia',)                                                  

    def get_queryset(self, request):                                                                          
        return self.model.objects.order_by('id')                                                              

...

teleconsultoria / tests.py

def test_ver_lista_bibliografias_se_existirem_bibliografias(self):
    Bibliografia.objects.create(**{'nome': 'Bibliografia 1'})
    Bibliografia.objects.create(**{'nome': 'Bibliografia 2'})
    Bibliografia.objects.create(**{'nome': 'Bibliografia 3'})
    response = self.client.get('/teleconsultoria/bibliografia/')
    self.assertIn('3 Bibliografias', response.content)
  

AssertionError:' 3 Bibliografias'没有在''

中找到

1 个答案:

答案 0 :(得分:0)

找到解决方案!通过浏览Django文档,我发现我可以手动添加必要的权限:

https://docs.djangoproject.com/en/1.8/topics/auth/default/#permissions-and-authorization

我的主要测试用例结束了这样:

class BibliografiaCrudTestCase(BaseFluxoTestCase):                                                            

    dados = {}                                                                                                
    permissions = ['ver_bibliografia', 'criar_bibliografia', 'alterar_bibliografia', 'excluir_bibliografia']  

    def setUp(self):                                                                                          
        super(BibliografiaCrudTestCase, self).setUp()                                                         
        self.login()                                                                                          
        usuario = Usuario.objects.first()                                                                     
        for permission in Permission.objects.filter(codename__in=self.permissions):                           
            usuario.user_permissions.add(permission.id)
    ...