2
respostas

Não consigo autenticar com a APITestCase

escola/test/test_cursos.py:

from rest_framework.test import APITestCase
from escola.models import Curso
from django.urls import reverse
from rest_framework import status
from django.contrib.auth.models import User
from django.contrib.auth import get_user


class CursosTestCase(APITestCase):

    def setUp(self) -> None:


        self.client.login(username='vinicius', password='mini@mim2')

        self.list_url = reverse('Cursos-list')
        self.curso_teste_1 = Curso.objects.create(
            codigo='JB1',
            descricao='Curso de Java Básico',
            nivel='B'
        )

        self.curso_teste_2 = Curso.objects.create(
            codigo='JI1',
            descricao='Curso de Java Intermediário',
            nivel='I'
        )

    # def test_fail(self):
    #     self.fail('Teste falhou de propósito')


    def test_GET_para_listar_cursos(self):
        """Teste para verificar se a requisição GET retorna os cursos"""

        response = self.client.get(self.list_url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)

Sei que o erro é por autenticação, mas estou com dificuldade de resolver:

(venv) vinicius@vinicius-ubuntu:~/Documents/Python/Django Rest/ESCOLA_API$ python manage.py test
True
Found 1 test(s).
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_GET_para_listar_cursos (escola.test.test_cursos.CursosTestCase)
Teste para verificar se a requisição GET retorna os cursos
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vinicius/Documents/Python/Django Rest/ESCOLA_API/escola/test/test_cursos.py", line 39, in test_GET_para_listar_cursos
    self.assertEqual(response.status_code, status.HTTP_200_OK)
AssertionError: 401 != 200

----------------------------------------------------------------------
Ran 1 test in 0.447s

FAILED (failures=1)
Destroying test database for alias 'default'...
2 respostas

Consegui arrumar assim, não sei até que ponto está correto:

class CursosTestCase(APITestCase):

    def setUp(self) -> None:
        self.user = User.objects.create_superuser(
        email='asdf@gmail.com',
        password='hiwa_asdf',
        username='smile as we go ahead'
        )
        self.client.force_authenticate(self.user)
        #self.client.force_login(username=self.user.username, password=self.user.password)

        self.list_url = reverse('Cursos-list')
        self.curso_teste_1 = Curso.objects.create(
            codigo='JB1',
            descricao='Curso de Java Básico',
            nivel='B'
        )

        self.curso_teste_2 = Curso.objects.create(
            codigo='JI1',
            descricao='Curso de Java Intermediário',
            nivel='I'
        )

    # def test_fail(self):
    #     self.fail('Teste falhou de propósito')


    def test_GET_para_listar_cursos(self):
        """Teste para verificar se a requisição GET retorna os cursos"""

        response = self.client.get(self.list_url)
        self.assertEquals(response.status_code, status.HTTP_200_OK)

Olá Vinicius, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Fico feliz em saber que você conseguiu solucionar o erro apresentado. O código apresentado está correto e a lógica da classe de teste está bem estruturada. Quando estamos trabalhando na área da programação não existe apenas um meio para conseguirmos chegar a um determinado resultado, mas sim vários.

Continue com essa dedicação e empenho. Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!