Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Testes dando errado (401 != 200)

Estou fazendo os testes para o Challenge 7 edição, tenho configurado no meu settings as permissões e autenticações padrões:

'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
        'rest_framework.permissions.DjangoModelPermissions',
        ],

    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.BasicAuthentication',],

Quando vou realizar os testes, aparece o erro que o metodo 401 != 200. No qual diz sobre a não autorização... e quanto eu comento as linhas de código acima, os testes funcionam perfeitamente.... Eu teria que colocar a permissão no código dos testes? como faria isso?

1 resposta
solução!

Olá José! Tudo bem?

O erro que você está enfrentando (401 != 200) indica que a resposta retornada pelo servidor durante os testes não é a esperada. O código de status HTTP 401 significa "Unauthorized" (não autorizado), enquanto o código 200 representa uma resposta bem-sucedida. Isso sugere que há um problema com a autenticação ou permissões ao realizar os testes.

Você mencionou que tem as configurações padrão de permissões e autenticações definidas em seu arquivo settings.py, o que é uma prática comum. No entanto, ao executar os testes, eles não conseguem autenticar corretamente, resultando em falha.

A causa mais provável é que os testes não estão enviando as credenciais de autenticação necessárias. Isso acontece porque os testes normalmente não têm acesso direto às configurações do Django e ao middleware de autenticação padrão.

Para resolver esse problema, é necessário que os testes forneçam as credenciais de autenticação nos cabeçalhos das solicitações HTTP. Uma maneira de fazer isso é utilizando o módulo APIClient do Django Rest Framework (DRF) para criar e enviar as solicitações autenticadas.

Aqui está um exemplo de como você pode fazer isso nos seus testes:

from rest_framework.test import APITestCase
from rest_framework import status

class SeuTeste(APITestCase):
    def setUp(self):
        # Configuração do usuário e autenticação
        self.usuario = User.objects.create_user(username='seu_usuario', password='sua_senha')
        self.client.login(username='seu_usuario', password='sua_senha')

    def test_sua_view_protegida(self):
        url = '/sua/url/protegida/'
        response = self.client.get(url)

        # Verifica se o acesso foi autorizado (código 200)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

Neste exemplo, criamos uma classe de teste que herda de APITestCase. No método setUp, criamos um usuário de teste e fazemos o login do cliente de teste usando as credenciais desse usuário. Dessa forma, as solicitações enviadas pelo cliente durante os testes estarão autenticadas.

Em seguida, no método de teste test_sua_view_protegida, enviamos uma solicitação GET para a URL que representa a view que você deseja testar. O método self.client.get() é usado para enviar a solicitação autenticada pelo cliente de teste.

Por fim, verificamos se a resposta retornou o código HTTP 200, indicando que o acesso foi autorizado. Caso a resposta retorne um código 401, você saberá que a autenticação não está sendo enviada corretamente, e é aí que o erro está ocorrendo.

Lembre-se de substituir "/sua/url/protegida/" pela URL da view que você deseja testar e ajuste os campos de autenticação (username e password) de acordo com seus dados de teste.

Com essa abordagem, seus testes devem funcionar corretamente e refletir o comportamento esperado da autenticação e permissões em suas views.

Espero ter ajudado! Bons estudos!