eventos_v2 / test_app.py
giseldo's picture
ultima
c96b1d5
import unittest
from unittest.mock import patch, MagicMock
from flask import Flask
import json
from app import app
class TestAddConference(unittest.TestCase):
def setUp(self):
self.app = app
self.app.config['TESTING'] = True
self.client = self.app.test_client()
# Criar sessão fictícia para simular usuário logado
with self.client.session_transaction() as sess:
sess['user'] = {
'id': 'test-user-id',
'email': 'admin@test.com',
'access_token': 'fake-token'
}
@patch('app.supabase')
def test_add_conference_success(self, mock_supabase):
# Configurar o mock do Supabase para simular sucesso na inserção
mock_response = MagicMock()
mock_response.data = [{"id": "test123"}]
mock_supabase.table.return_value.insert.return_value.execute.return_value = mock_response
# Dados de conferência para teste
conference_data = {
'id': 'test123',
'name': 'ICML',
'full_name': 'International Conference on Machine Learning',
'dates': '10-15 July 2024',
'location': 'Vienna, Austria',
'categories': 'machine-learning, artificial-intelligence',
'deadline': '2024-01-30 23:59',
'website': 'icml2024.org',
'description': 'A leading international academic conference in machine learning.'
}
# Fazer a requisição POST para adicionar uma conferência
response = self.client.post('/admin/conferences/new',
data=conference_data,
follow_redirects=True)
# Verificar se o status da resposta é 200 OK
self.assertEqual(response.status_code, 200)
# Verificar se o Supabase foi chamado corretamente
mock_supabase.table.assert_called_once_with('conferences')
mock_supabase.table().insert.assert_called_once()
# Verificar se a resposta contém a mensagem de sucesso
self.assertIn(b'Confer\xc3\xaancia adicionada com sucesso!', response.data)
@patch('app.supabase')
def test_add_conference_error(self, mock_supabase):
# Configurar o mock para simular um erro
mock_supabase.table.return_value.insert.return_value.execute.side_effect = Exception('Erro de teste')
# Dados incompletos para provocar erro
conference_data = {
'name': 'ICML',
'full_name': 'International Conference on Machine Learning',
# outros campos omitidos propositalmente
}
# Fazer a requisição POST
response = self.client.post('/admin/conferences/new',
data=conference_data,
follow_redirects=True)
# Verificar se a resposta contém a mensagem de erro
self.assertIn(b'Erro ao adicionar confer\xc3\xaancia: Erro de teste', response.data)
@patch('app.supabase')
def test_add_conference_with_auto_id(self, mock_supabase):
# Configurar o mock do Supabase
mock_response = MagicMock()
mock_response.data = [{"id": "auto123"}]
mock_supabase.table.return_value.insert.return_value.execute.return_value = mock_response
# Dados sem ID (deve ser gerado automaticamente)
conference_data = {
'name': 'NeurIPS',
'full_name': 'Neural Information Processing Systems',
'dates': '9-15 December 2024',
'location': 'Vancouver, Canada',
'categories': 'neural-networks,deep-learning',
'deadline': '2024-05-17 23:59',
'website': 'neurips2024.cc',
'description': 'Leading conference on neural networks and deep learning'
}
# Fazer a requisição POST
response = self.client.post('/admin/conferences/new',
data=conference_data,
follow_redirects=True)
# Verificar se o status da resposta é 200 OK
self.assertEqual(response.status_code, 200)
# Verificar que o método para inserir no Supabase foi chamado
mock_supabase.table.assert_called_once_with('conferences')
mock_supabase.table().insert.assert_called_once()
# Verificamos que um ID foi gerado (não podemos checar o valor exato pois é aleatório)
call_args = mock_supabase.table().insert.call_args[0][0]
self.assertIsNotNone(call_args.get('id'))
if __name__ == '__main__':
unittest.main()