137 lines
4.1 KiB
Python
Executable File
137 lines
4.1 KiB
Python
Executable File
import asyncio
|
|
import sys
|
|
import os
|
|
sys.path.insert(0, "/home/marco/MonicaAgentIA/app")
|
|
|
|
os.environ["TELEGRAM_BOT_TOKEN"] = "test"
|
|
os.environ["TELEGRAM_CHAT_ID"] = "123"
|
|
|
|
from monica_agent import (
|
|
cancelar_command,
|
|
message_handler,
|
|
is_onboarding,
|
|
is_config_agent_profile,
|
|
is_shutting_down,
|
|
proactive_task,
|
|
app_instance,
|
|
)
|
|
|
|
class FakeMessage:
|
|
def __init__(self, text):
|
|
self.text = text
|
|
self.chat_id = 7889499475
|
|
|
|
async def reply_text(self, text, **kwargs):
|
|
print(f"BOT RESPONSE: {text[:300]}")
|
|
|
|
class FakeUpdate:
|
|
def __init__(self, text):
|
|
self.message = FakeMessage(text)
|
|
self.effective_chat = self
|
|
self.effective_user = self
|
|
self.effective_message = self.message
|
|
|
|
@property
|
|
def id(self):
|
|
return self.message.chat_id
|
|
|
|
@property
|
|
def username(self):
|
|
return "test_user"
|
|
|
|
@property
|
|
def first_name(self):
|
|
return "Marco"
|
|
|
|
class FakeContext:
|
|
def __init__(self):
|
|
self.bot = self
|
|
|
|
async def send_message(self, **kwargs):
|
|
print(f"BOT SEND: {kwargs.get('text', '')[:300]}")
|
|
|
|
async def test_cancelar_command():
|
|
print("=== Testando /cancelar ===")
|
|
|
|
# Simulate being in onboarding state
|
|
import monica_agent
|
|
monica_agent.is_onboarding = True
|
|
monica_agent.onboarding_step = 3
|
|
monica_agent.onboarding_answers = {"name": "Test"}
|
|
monica_agent.is_config_agent_profile = True
|
|
monica_agent.config_agent_step = 2
|
|
monica_agent.config_agent_field = "monica_visual_preferences"
|
|
|
|
update = FakeUpdate("/cancelar")
|
|
context = FakeContext()
|
|
|
|
try:
|
|
await cancelar_command(update, context)
|
|
print("✅ cancelar_command executou sem erros")
|
|
except Exception as e:
|
|
print(f"❌ Erro: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return
|
|
|
|
# Verify state was reset
|
|
print(f" is_onboarding={monica_agent.is_onboarding}")
|
|
print(f" onboarding_step={monica_agent.onboarding_step}")
|
|
print(f" onboarding_answers={monica_agent.onboarding_answers}")
|
|
print(f" is_config_agent_profile={monica_agent.is_config_agent_profile}")
|
|
print(f" config_agent_step={monica_agent.config_agent_step}")
|
|
print(f" config_agent_field={monica_agent.config_agent_field}")
|
|
print(f" is_shutting_down={monica_agent.is_shutting_down}")
|
|
|
|
assert monica_agent.is_onboarding == False
|
|
assert monica_agent.onboarding_step == 0
|
|
assert monica_agent.onboarding_answers == {}
|
|
assert monica_agent.is_config_agent_profile == False
|
|
assert monica_agent.config_agent_step == 0
|
|
assert monica_agent.config_agent_field == ""
|
|
assert monica_agent.is_shutting_down == True
|
|
|
|
print("✅ Estado resetado corretamente")
|
|
|
|
# Verify that after cancelar, normal messages are handled
|
|
print("\n=== Verificando que mensagens normais funcionam após /cancelar ===")
|
|
update = FakeUpdate("Olá Mônica!")
|
|
context = FakeContext()
|
|
try:
|
|
await message_handler(update, context)
|
|
print("✅ message_handler funciona após /cancelar")
|
|
except Exception as e:
|
|
print(f"❌ message_handler falhou após /cancelar: {e}")
|
|
|
|
async def test_help_contains_cancelar():
|
|
print("\n=== Verificando /help contém /cancelar ===")
|
|
from monica_agent import help_command
|
|
|
|
update = FakeUpdate("/help")
|
|
context = FakeContext()
|
|
responses = []
|
|
|
|
original_reply = FakeMessage.reply_text
|
|
async def capture_reply(self, text, **kwargs):
|
|
responses.append(text)
|
|
print(f"BOT RESPONSE: {text[:300]}")
|
|
|
|
FakeMessage.reply_text = capture_reply
|
|
try:
|
|
await help_command(update, context)
|
|
help_text = responses[0] if responses else ""
|
|
if "/cancelar" in help_text:
|
|
print("✅ /help menciona /cancelar")
|
|
else:
|
|
print("❌ /help não menciona /cancelar")
|
|
finally:
|
|
FakeMessage.reply_text = original_reply
|
|
|
|
async def main():
|
|
await test_cancelar_command()
|
|
await test_help_contains_cancelar()
|
|
print("\n=== Todos os testes concluídos ===")
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(main())
|