First Commit

This commit is contained in:
marco
2026-09-03 15:34:28 -03:00
commit f97819e551
3005 changed files with 487818 additions and 0 deletions
+285
View File
@@ -0,0 +1,285 @@
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 (
useragenda_command,
load_user_profile,
save_user_profile,
clear_all_data,
is_valid_time,
format_user_agenda,
get_user_agenda,
get_current_activity,
message_handler,
)
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[:500]}")
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', '')[:500]}")
async def test_useragenda_command():
print("=== Testando /useragenda ===")
update = FakeUpdate("/useragenda")
context = FakeContext()
try:
await useragenda_command(update, context)
print("✅ useragenda_command executou sem erros")
except Exception as e:
print(f"❌ Erro: {e}")
import traceback
traceback.print_exc()
async def test_useragenda_flow():
print("\n=== Testando fluxo /useragenda ===")
profile = load_user_profile()
profile["user_agenda"] = {}
save_user_profile(profile)
update = FakeUpdate("/useragenda")
context = FakeContext()
await useragenda_command(update, context)
update = FakeUpdate("1")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após selecionar atividade 1: handled={handled}")
update = FakeUpdate("07:00")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após enviar horário: handled={handled}")
update = FakeUpdate("2")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após selecionar atividade 2: handled={handled}")
update = FakeUpdate("08:00")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após enviar horário: handled={handled}")
update = FakeUpdate("fim")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após finalizar: handled={handled}")
profile = load_user_profile()
agenda = profile.get("user_agenda", {})
print(f" Agenda salva: {agenda}")
if agenda.get("acordar") == "07:00" and agenda.get("cafe_da_manha") == "08:00":
print("✅ Agenda salva corretamente")
else:
print("❌ Agenda não foi salva como esperado")
async def test_useragenda_all_activities():
print("\n=== Testando fluxo completo /useragenda ===")
profile = load_user_profile()
profile["user_agenda"] = {}
save_user_profile(profile)
update = FakeUpdate("/useragenda")
context = FakeContext()
await useragenda_command(update, context)
activities = [
("1", "06:30"),
("2", "07:00"),
("3", "08:00"),
("4", "09:00"),
("5", "12:00"),
("6", "15:00"),
("7", "19:00"),
("8", "20:00"),
("9", "21:00"),
("10", "22:00"),
("11", "23:00"),
("fim", ""),
]
for activity, time in activities:
update = FakeUpdate(activity)
context = FakeContext()
handled = await message_handler(update, context)
print(f" Atividade {activity}: handled={handled}")
if time:
update = FakeUpdate(time)
context = FakeContext()
handled = await message_handler(update, context)
print(f" Horário {time}: handled={handled}")
profile = load_user_profile()
agenda = profile.get("user_agenda", {})
print(f" Agenda salva: {agenda}")
if len(agenda) == 11:
print("✅ Todas as 11 atividades foram salvas")
else:
print(f"❌ Esperado 11 atividades, salvas {len(agenda)}")
async def test_useragenda_invalid_option():
print("\n=== Testando opção inválida ===")
profile = load_user_profile()
profile["user_agenda"] = {}
save_user_profile(profile)
update = FakeUpdate("/useragenda")
context = FakeContext()
await useragenda_command(update, context)
update = FakeUpdate("15")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após opção inválida: handled={handled}")
profile = load_user_profile()
agenda = profile.get("user_agenda", {})
if not agenda:
print("✅ Opção inválida foi rejeitada corretamente")
else:
print("❌ Opção inválida foi aceita (erro)")
async def test_useragenda_invalid_time():
print("\n=== Testando horário inválido ===")
profile = load_user_profile()
profile["user_agenda"] = {}
save_user_profile(profile)
update = FakeUpdate("/useragenda")
context = FakeContext()
await useragenda_command(update, context)
update = FakeUpdate("1")
context = FakeContext()
await message_handler(update, context)
update = FakeUpdate("25:00")
context = FakeContext()
handled = await message_handler(update, context)
print(f" Após horário inválido: handled={handled}")
profile = load_user_profile()
agenda = profile.get("user_agenda", {})
if not agenda:
print("✅ Horário inválido foi rejeitado corretamente")
else:
print("❌ Horário inválido foi aceito (erro)")
async def test_clear_all_data():
print("\n=== Testando /limpar ===")
profile = load_user_profile()
profile["name"] = "Marco"
profile["user_agenda"] = {
"acordar": "06:30",
"cafe_da_manha": "07:00",
"trabalho": "08:00",
}
save_user_profile(profile)
clear_all_data()
profile = load_user_profile()
if not profile.get("user_agenda"):
print("✅ /limpar removeu a agenda do usuário")
else:
print("❌ /limpar não removeu a agenda do usuário")
def test_format_user_agenda():
print("\n=== Testando format_user_agenda ===")
agenda = {
"acordar": "06:30",
"cafe_da_manha": "07:00",
"trabalho": "08:00",
"almoco": "12:00",
}
formatted = format_user_agenda(agenda)
print(f" Agenda formatada:\n{formatted}")
if "Acordar: 06:30" in formatted and "Trabalho: 08:00" in formatted:
print("✅ format_user_agenda funcionou corretamente")
else:
print("❌ format_user_agenda não funcionou como esperado")
def test_get_current_activity():
print("\n=== Testando get_current_activity ===")
from datetime import datetime
from unittest.mock import patch
agenda = {
"acordar": "06:00",
"cafe_da_manha": "07:00",
"trabalho": "08:00",
"almoco": "12:00",
}
test_cases = [
(agenda, "2026-08-24 06:30", "acordar"),
(agenda, "2026-08-24 07:30", "cafe_da_manha"),
(agenda, "2026-08-24 10:00", "trabalho"),
(agenda, "2026-08-24 12:30", "almoco"),
({}, "2026-08-24 12:30", None),
]
all_ok = True
for agenda, dt_str, expected in test_cases:
test_dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M")
with patch("monica_agent.datetime") as mock_dt:
mock_dt.now.return_value = test_dt
mock_dt.side_effect = datetime
result = get_current_activity(agenda)
status = "✅" if result == expected else "❌"
print(f" {status} {dt_str}: {result} (esperado {expected})")
if result != expected:
all_ok = False
return all_ok
async def main():
await test_useragenda_command()
await test_useragenda_flow()
await test_useragenda_all_activities()
await test_useragenda_invalid_option()
await test_useragenda_invalid_time()
await test_clear_all_data()
test_format_user_agenda()
time_ok = test_get_current_activity()
print("\n=== Todos os testes concluídos ===")
if time_ok:
print("✅ Todos os testes de useragenda passaram!")
else:
print("❌ Alguns testes falharam")
if __name__ == "__main__":
asyncio.run(main())