sebasmos's picture
Update demo with latest codebase changes
420bcec
raw
history blame
3.9 kB
"""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