from rest_framework import status
from rest_framework.test import APITestCase, APIClient

from .models import Usuario


class TrocarSenhaViewTests(APITestCase):
    def setUp(self):
        self.client = APIClient()
        self.user = Usuario.objects.create_user(
            email="teste@example.com",
            password="SenhaAntiga@123",
            first_name="Teste",
            last_name="User",
        )
        self.client.force_authenticate(user=self.user)
        self.url = "/api/usuarios/me/trocar-senha/"

    def test_trocar_senha_com_sucesso(self):
        response = self.client.put(
            self.url,
            {"old_password": "SenhaAntiga@123", "new_password": "SenhaNova@123"},
            format="json",
        )
        self.assertEqual(response.status_code, status.HTTP_200_OK)

        self.user.refresh_from_db()
        self.assertTrue(self.user.check_password("SenhaNova@123"))
        self.assertFalse(self.user.check_password("SenhaAntiga@123"))

    def test_trocar_senha_com_senha_antiga_incorreta(self):
        response = self.client.put(
            self.url,
            {"old_password": "Errada", "new_password": "SenhaNova@123"},
            format="json",
        )
        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertIn("old_password", response.data)
