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"
|