File size: 4,717 Bytes
c96b1d5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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': '[email protected]',
                '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()