Spaces:
Sleeping
Sleeping
| """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 | |