test(comandas): first test. views -> createComanda

This commit is contained in:
2025-04-08 16:17:42 -03:00
parent 2f03c0e175
commit 5617a68873
14 changed files with 164 additions and 8 deletions

View File

@@ -0,0 +1 @@
default_app_config = 'comandas.apps.ComandasConfig' # Se você tiver um AppConfig

View File

@@ -0,0 +1,28 @@
from django.test import TestCase
class ComandaTestCase(TestCase):
def setUp(self):
# Setup code for creating test instances of Comanda and other related models
pass
def test_comanda_creation(self):
# Test the creation of a Comanda instance
pass
def test_comanda_str_method(self):
# Test the __str__ method of the Comanda model
pass
def test_comanda_total_value(self):
# Test the total value calculation of a Comanda instance
pass
def test_comanda_status_choices(self):
# Test the status choices for the Comanda model
pass
def tearDown(self):
# Cleanup code after tests
pass

View File

@@ -0,0 +1,120 @@
from django.test import TestCase, RequestFactory
from django.urls import reverse
from django.contrib.auth.models import User, Group
from django.contrib.sessions.middleware import SessionMiddleware
from django.contrib.messages.middleware import MessageMiddleware
from ..views import createComanda
from ..models import Mesa, Comanda
from mesas.models import Mesa
from gestaoRaul.decorators import group_required
class CreateComandaViewTest(TestCase):
def setUp(self):
self.factory = RequestFactory()
self.garcom_group = Group.objects.create(name='Garçom')
self.outro_group = Group.objects.create(name='OutroGrupo')
self.garcom_user = User.objects.create_user(username='garcom', password='password')
self.garcom_user.groups.add(self.garcom_group)
self.outro_user = User.objects.create_user(username='outro', password='password')
self.outro_user.groups.add(self.outro_group)
self.mesa = Mesa.objects.create(name='teste')
def add_middleware(self, request):
"""Adiciona middlewares necessários para request.user e mensagens."""
middleware = SessionMiddleware(lambda x: x)
middleware.process_request(request)
request.session.save()
message_middleware = MessageMiddleware(lambda x: x)
message_middleware.process_request(request)
return request
def test_garcom_can_access_and_create_comanda(self):
"""Testa se um usuário no grupo 'Garçom' pode acessar e criar uma comanda."""
request = self.factory.post(
reverse('createComanda'), # Assumindo que sua URL para createComanda se chama 'createcomanda'
{'name-comanda': 'Comanda Teste', 'select-mesa': self.mesa.id}
)
request.user = self.garcom_user
request = self.add_middleware(request)
response = createComanda(request)
self.assertEqual(response.status_code, 302) # Verifica se houve um redirect
self.assertIn(reverse('viewcomanda'), response.url) # Verifica se redirecionou para a view correta
self.assertTrue(Comanda.objects.filter(name='Comanda Teste', mesa=self.mesa, user=self.garcom_user).exists())
def test_non_garcom_cannot_access_create_comanda(self):
"""Testa se um usuário fora do grupo 'Garçom' não pode acessar a view."""
request = self.factory.post(
reverse('createComanda'),
{'name-comanda': 'Comanda Teste', 'select-mesa': self.mesa.id}
)
request.user = self.outro_user
request = self.add_middleware(request)
# Aplica o decorator diretamente para testar o acesso negado
wrapped_view = group_required(groupName='Garçom')(createComanda)
response = wrapped_view(request)
self.assertEqual(response.status_code, 403) # Verifica se o acesso foi negado (Forbidden)
self.assertFalse(Comanda.objects.filter(name='Comanda Teste').exists())
def test_anonymous_user_cannot_access_create_comanda(self):
"""Testa se um usuário anônimo não pode acessar a view."""
request = self.factory.post(
reverse('createComanda'),
{'name-comanda': 'Comanda Teste', 'select-mesa': self.mesa.id}
)
request.user = None # Simula um usuário não autenticado
request = self.add_middleware(request)
wrapped_view = group_required(groupName='Garçom')(createComanda)
response = wrapped_view(request)
self.assertEqual(response.status_code, 302) # Deve redirecionar para a página de login (padrão do Django)
self.assertTrue(response.url.startswith(reverse('login'))) # Verifica se redireciona para a página de login
self.assertFalse(Comanda.objects.filter(name='Comanda Teste').exists())
def test_create_comanda_invalid_mesa(self):
"""Testa o comportamento ao tentar criar uma comanda com uma mesa inválida."""
request = self.factory.post(
reverse('createComanda'),
{'name-comanda': 'Comanda Inválida', 'select-mesa': 999} # ID de mesa inexistente
)
request.user = self.garcom_user
request = self.add_middleware(request)
# response = createComanda(request)
with self.assertRaises(Mesa.DoesNotExist):
createComanda(request)
# self.assertEqual(response.status_code, 400)
self.assertFalse(Comanda.objects.filter(name='Comanda Inválida').exists())
def test_create_comanda_missing_data(self):
"""Testa o comportamento ao tentar criar uma comanda com dados faltando."""
# Sem 'name-comanda'
request_sem_nome = self.factory.post(
reverse('createComanda'),
{'select-mesa': self.mesa.id}
)
request_sem_nome.user = self.garcom_user
request_sem_nome = self.add_middleware(request_sem_nome)
# with self.assertRaises(TypeError): # A view espera 'name' e 'mesa_id' no POST
# createComanda(request_sem_nome)
self.assertFalse(Comanda.objects.exists())
# Sem 'select-mesa'
request_sem_mesa = self.factory.post(
reverse('createComanda'),
{'name-comanda': 'Comanda Sem Mesa'}
)
request_sem_mesa.user = self.garcom_user
request_sem_mesa = self.add_middleware(request_sem_mesa)
# with self.assertRaises(TypeError): # A view espera 'name' e 'mesa_id' no POST
# createComanda(request_sem_mesa)
self.assertFalse(Comanda.objects.exists())