"""Tests for meeting parsers.""" import pytest from datetime import datetime from pathlib import Path from src.parsers import MeetingParser, ActionItem, MeetingNote, load_meetings_from_directory class TestMeetingParser: """Tests for MeetingParser class.""" def test_parse_date_iso_format(self): """Test parsing ISO format date.""" result = MeetingParser.parse_date("2025-01-15") assert result == datetime(2025, 1, 15) def test_parse_date_us_format(self): """Test parsing US format date.""" result = MeetingParser.parse_date("01/15/2025") assert result == datetime(2025, 1, 15) def test_parse_date_verbose_format(self): """Test parsing verbose format date.""" result = MeetingParser.parse_date("January 15, 2025") assert result == datetime(2025, 1, 15) def test_parse_date_invalid(self): """Test parsing invalid date returns None.""" result = MeetingParser.parse_date("not a date") assert result is None def test_parse_action_item_simple(self): """Test parsing simple action item.""" result = MeetingParser.parse_action_item("- [ ] Complete the report") assert result is not None assert result.task == "Complete the report" assert result.completed is False assert result.assignee is None def test_parse_action_item_completed(self): """Test parsing completed action item.""" result = MeetingParser.parse_action_item("- [x] Review PR") assert result is not None assert result.completed is True def test_parse_action_item_with_assignee(self): """Test parsing action item with assignee.""" result = MeetingParser.parse_action_item("- [ ] Alice: Implement feature") assert result is not None assert result.assignee == "Alice" assert result.task == "Implement feature" def test_parse_action_item_with_deadline(self): """Test parsing action item with deadline.""" result = MeetingParser.parse_action_item("- [ ] Bob: Fix bug by 2025-01-20") assert result is not None assert result.assignee == "Bob" assert result.deadline == "2025-01-20" def test_parse_meeting_file(self, temp_data_dir): """Test parsing a complete meeting file.""" meeting_file = temp_data_dir / "test_project" / "meetings" / "2025-01-15-sprint-planning.md" result = MeetingParser.parse(meeting_file, "test_project") assert result is not None assert result.project_name == "test_project" assert result.title == "Sprint Planning" assert result.date == datetime(2025, 1, 15) assert "Alice" in result.participants assert "Bob" in result.participants assert len(result.decisions) == 2 assert len(result.action_items) == 3 assert len(result.blockers) == 2 def test_parse_nonexistent_file(self): """Test parsing nonexistent file returns None.""" result = MeetingParser.parse(Path("/nonexistent/file.md"), "test") assert result is None class TestLoadMeetings: """Tests for load_meetings_from_directory function.""" def test_load_meetings_from_directory(self, temp_data_dir): """Test loading meetings from directory.""" meetings = load_meetings_from_directory(temp_data_dir) assert len(meetings) == 1 assert meetings[0].project_name == "test_project" def test_load_meetings_empty_directory(self, tmp_path): """Test loading from empty directory.""" meetings = load_meetings_from_directory(tmp_path) assert len(meetings) == 0 def test_load_meetings_nonexistent_directory(self): """Test loading from nonexistent directory.""" meetings = load_meetings_from_directory(Path("/nonexistent")) assert len(meetings) == 0