import unittest
from src import create_app
from src.models import db, User, Agente, AgenteTreino, Chat, Message
from src.config import config

class TestConfig:
    TESTING = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SECRET_KEY = 'test-key'
    WTF_CSRF_ENABLED = False

class TestApp(unittest.TestCase):
    def setUp(self):
        self.app = create_app('test')
        self.app.config.from_object(TestConfig)
        self.client = self.app.test_client()
        self.app_context = self.app.app_context()
        self.app_context.push()
        
        self.user = User(username='test', password='test123')
        db.session.add(self.user)
        db.session.commit()
        
    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()
        
    def test_login(self):
        response = self.client.post('/login', data={
            'username': 'test',
            'password': 'test123'
        }, follow_redirects=True)
        self.assertEqual(response.status_code, 200)
        
    def test_create_agent(self):
        self.client.post('/login', data={
            'username': 'test',
            'password': 'test123'
        })
        
        response = self.client.post('/novo', data={
            'nome': 'Test Agent',
            'descricao': 'Test Description'
        }, follow_redirects=True)
        self.assertEqual(response.status_code, 200)
        agent = Agente.query.filter_by(nome='Test Agent').first()
        self.assertIsNotNone(agent)
        self.assertEqual(agent.descricao, 'Test Description')
        
    def test_chat(self):
        self.client.post('/login', data={
            'username': 'test',
            'password': 'test123'
        })
        agent = Agente(nome='Test Agent', descricao='Test Description', user_id=self.user.id)
        db.session.add(agent)
        db.session.commit()
        response = self.client.post('/chat', json={
            'agent_id': agent.id,
            'message': 'Hello'
        })
        self.assertEqual(response.status_code, 200)
        chat = Chat.query.filter_by(agent_id=agent.id).first()
        self.assertIsNotNone(chat)
        message = Message.query.filter_by(chat_id=chat.id).first()
        self.assertIsNotNone(message)
        self.assertEqual(message.message, 'Hello')
        
if __name__ == '__main__':
    unittest.main() 