File: test_alarm.py

package info (click to toggle)
python-ical 9.0.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,448 kB
  • sloc: python: 13,877; sh: 9; makefile: 5
file content (93 lines) | stat: -rw-r--r-- 2,771 bytes parent folder | download
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
"""Tests for Alarm component."""

from __future__ import annotations

import datetime

import pytest

from ical.alarm import Alarm
from ical.exceptions import CalendarParseError


def test_todo() -> None:
    """Test a valid Alarm."""
    alarm = Alarm(action="AUDIO", trigger=datetime.timedelta(minutes=-5))
    assert alarm.action == "AUDIO"
    assert alarm.trigger == datetime.timedelta(minutes=-5)
    assert not alarm.duration
    assert not alarm.repeat


def test_duration_and_repeat() -> None:
    """Test relationship between the duration and repeat fields."""

    alarm = Alarm(
        action="AUDIO",
        trigger=datetime.timedelta(minutes=-5),
        duration=datetime.timedelta(seconds=30),
        repeat=2,
    )
    assert alarm.action
    assert alarm.trigger
    assert alarm.duration
    assert alarm.repeat == 2

    # Duration but no repeat
    with pytest.raises(CalendarParseError):
        Alarm(
            action="AUDIO",
            trigger=datetime.timedelta(minutes=-5),
            duration=datetime.timedelta(seconds=30),
        )

    # Repeat but no duration
    with pytest.raises(CalendarParseError):
        Alarm(action="AUDIO", trigger=datetime.timedelta(minutes=-5), repeat=2)


def test_display_required_fields() -> None:
    """Test required fields for action DISPLAY."""
    with pytest.raises(CalendarParseError, match="Description value is required for action DISPLAY"):
        Alarm(action="DISPLAY", trigger=datetime.timedelta(minutes=-5))

    alarm = Alarm(
        action="DISPLAY",
        trigger=datetime.timedelta(minutes=-5),
        description="Notification description",
    )
    assert alarm.action == "DISPLAY"
    assert alarm.description == "Notification description"


def test_email_required_fields() -> None:
    """Test required fields for action EMAIL."""
    # Missing multiple fields
    with pytest.raises(CalendarParseError, match="Description value is required for action EMAIL"):
        Alarm(action="EMAIL", trigger=datetime.timedelta(minutes=-5))

    # Missing summary
    with pytest.raises(CalendarParseError):
        Alarm(
            action="EMAIL",
            trigger=datetime.timedelta(minutes=-5),
            description="Email description",
        )

    # Missing description
    with pytest.raises(CalendarParseError):
        Alarm(
            action="EMAIL",
            trigger=datetime.timedelta(minutes=-5),
            summary="Email summary",
        )

    alarm = Alarm(
        action="DISPLAY",
        trigger=datetime.timedelta(minutes=-5),
        description="Email description",
        summary="Email summary",
    )
    assert alarm.action == "DISPLAY"
    assert alarm.summary == "Email summary"
    assert alarm.description == "Email description"