File: test_recurrence.py

package info (click to toggle)
python-exchangelib 5.5.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 12,084 kB
  • sloc: python: 25,351; sh: 6; makefile: 5
file content (79 lines) | stat: -rw-r--r-- 3,816 bytes parent folder | download | duplicates (2)
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
import datetime

from exchangelib.fields import AUGUST, FEBRUARY, LAST, MONDAY, SECOND, SUNDAY, WEEKEND_DAY
from exchangelib.recurrence import (
    AbsoluteMonthlyPattern,
    AbsoluteYearlyPattern,
    DailyPattern,
    DailyRegeneration,
    EndDatePattern,
    MonthlyRegeneration,
    NoEndPattern,
    NumberedPattern,
    Recurrence,
    RelativeMonthlyPattern,
    RelativeYearlyPattern,
    WeeklyPattern,
    WeeklyRegeneration,
    YearlyRegeneration,
)

from .common import TimedTestCase


class RecurrenceTest(TimedTestCase):
    def test_magic(self):
        pattern = AbsoluteYearlyPattern(month=FEBRUARY, day_of_month=28)
        self.assertEqual(str(pattern), "Occurs on day 28 of February")
        pattern = RelativeYearlyPattern(month=AUGUST, week_number=SECOND, weekday=WEEKEND_DAY)
        self.assertEqual(str(pattern), "Occurs on weekday WeekendDay in the Second week of August")
        pattern = AbsoluteMonthlyPattern(interval=3, day_of_month=31)
        self.assertEqual(str(pattern), "Occurs on day 31 of every 3 month(s)")
        pattern = RelativeMonthlyPattern(interval=2, week_number=LAST, weekday=5)
        self.assertEqual(str(pattern), "Occurs on weekday Friday in the Last week of every 2 month(s)")
        pattern = WeeklyPattern(interval=4, weekdays=[1, 7], first_day_of_week=7)
        self.assertEqual(
            str(pattern),
            "Occurs on weekdays Monday, Sunday of every 4 week(s) where the first day of the week is Sunday",
        )
        pattern = WeeklyPattern(interval=4, weekdays=[MONDAY, SUNDAY], first_day_of_week=7)
        self.assertEqual(
            str(pattern),
            "Occurs on weekdays Monday, Sunday of every 4 week(s) where the first day of the week is Sunday",
        )
        pattern = DailyPattern(interval=6)
        self.assertEqual(str(pattern), "Occurs every 6 day(s)")
        pattern = YearlyRegeneration(interval=6)
        self.assertEqual(str(pattern), "Regenerates every 6 year(s)")
        pattern = MonthlyRegeneration(interval=6)
        self.assertEqual(str(pattern), "Regenerates every 6 month(s)")
        pattern = WeeklyRegeneration(interval=6)
        self.assertEqual(str(pattern), "Regenerates every 6 week(s)")
        pattern = DailyRegeneration(interval=6)
        self.assertEqual(str(pattern), "Regenerates every 6 day(s)")

        d_start = datetime.date(2017, 9, 1)
        d_end = datetime.date(2017, 9, 7)
        boundary = NoEndPattern(start=d_start)
        self.assertEqual(str(boundary), "Starts on 2017-09-01")
        boundary = EndDatePattern(start=d_start, end=d_end)
        self.assertEqual(str(boundary), "Starts on 2017-09-01, ends on 2017-09-07")
        boundary = NumberedPattern(start=d_start, number=1)
        self.assertEqual(str(boundary), "Starts on 2017-09-01 and occurs 1 time(s)")

    def test_validation(self):
        p = DailyPattern(interval=3)
        d_start = datetime.date(2017, 9, 1)
        d_end = datetime.date(2017, 9, 7)
        with self.assertRaises(ValueError):
            Recurrence(pattern=p, boundary="foo", start="bar")  # Specify *either* boundary *or* start, end and number
        with self.assertRaises(ValueError):
            Recurrence(pattern=p, start="foo", end="bar", number="baz")  # number is invalid when end is present
        with self.assertRaises(ValueError):
            Recurrence(pattern=p, end="bar", number="baz")  # Must have start
        r = Recurrence(pattern=p, start=d_start)
        self.assertEqual(r.boundary, NoEndPattern(start=d_start))
        r = Recurrence(pattern=p, start=d_start, end=d_end)
        self.assertEqual(r.boundary, EndDatePattern(start=d_start, end=d_end))
        r = Recurrence(pattern=p, start=d_start, number=1)
        self.assertEqual(r.boundary, NumberedPattern(start=d_start, number=1))