from src.executive_assistant.env import ExecutiveAssistantEnv from src.executive_assistant.models import AssistantAction def test_easy_env_reset_exposes_seeded_email() -> None: env = ExecutiveAssistantEnv(task_name="easy_deadline_extraction") observation = env.reset() assert len(observation.unread_emails) == 1 def test_easy_env_can_add_todo() -> None: env = ExecutiveAssistantEnv(task_name="easy_deadline_extraction") env.reset() observation, reward, done, info = env.step( AssistantAction( action_type="add_todo", payload="Proposal due", secondary_payload="2026-04-10", ) ) assert "Proposal due" in observation.active_todos assert reward.total_score >= 0.0 assert done is False assert info["task_name"] == "easy_deadline_extraction" def test_read_email_populates_current_email() -> None: env = ExecutiveAssistantEnv(task_name="easy_deadline_extraction") observation = env.reset() observation, _, _, _ = env.step( AssistantAction(action_type="read_email", target_id=observation.unread_emails[0].id) ) assert observation.current_email is not None assert "proposal due" in observation.current_email.body.lower() def test_search_files_populates_results() -> None: env = ExecutiveAssistantEnv(task_name="hard_rag_reply") env.reset() observation, _, _, _ = env.step(AssistantAction(action_type="search_files", payload="Q3 Architecture")) assert observation.search_results assert observation.search_results[0].filename == "Q3_Architecture_Report.txt" def test_state_returns_workspace_snapshot() -> None: env = ExecutiveAssistantEnv(task_name="medium_triage_and_negotiation") env.reset() state = env.state() assert state["task_name"] == "medium_triage_and_negotiation" assert "workspace" in state assert "emails" in state["workspace"]