File size: 3,896 Bytes
420bcec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
"""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