|
| 1 | +import pytest |
| 2 | +from icalendar import Calendar |
| 3 | +from release_management import serialize |
| 4 | + |
| 5 | + |
| 6 | +@pytest.mark.parametrize( |
| 7 | + ('test_input', 'expected'), |
| 8 | + [ |
| 9 | + ('3.14.0 alpha 1', '[email protected]'), |
| 10 | + ('3.14.0 beta 2', '[email protected]'), |
| 11 | + ('3.14.0 candidate 3', '[email protected]'), |
| 12 | + |
| 13 | + ], |
| 14 | +) |
| 15 | +def test_ical_uid(test_input, expected): |
| 16 | + assert serialize.ical_uid(test_input) == expected |
| 17 | + |
| 18 | + |
| 19 | +def test_create_release_ical_returns_valid_icalendar(): |
| 20 | + # Act |
| 21 | + ical_str = serialize.create_release_ical() |
| 22 | + |
| 23 | + # Assert |
| 24 | + # Non-empty string |
| 25 | + assert isinstance(ical_str, str) |
| 26 | + assert len(ical_str) > 0 |
| 27 | + |
| 28 | + # Parseable as a valid iCalendar |
| 29 | + cal = Calendar.from_ical(ical_str) |
| 30 | + assert cal is not None |
| 31 | + |
| 32 | + |
| 33 | +def test_create_release_ical_has_calendar_metadata(): |
| 34 | + # Act |
| 35 | + ical_str = serialize.create_release_ical() |
| 36 | + |
| 37 | + # Assert |
| 38 | + cal = Calendar.from_ical(ical_str) |
| 39 | + |
| 40 | + # Check calendar metadata |
| 41 | + assert cal.get('version') == '2.0' |
| 42 | + assert cal.get('prodid') == '-//Python Software Foundation//Python releases//EN' |
| 43 | + assert cal.get('x-wr-calname') == 'Python releases' |
| 44 | + assert 'peps.python.org' in cal.get('x-wr-caldesc') |
| 45 | + |
| 46 | + |
| 47 | +def test_create_release_ical_first_event(): |
| 48 | + # Act |
| 49 | + ical_str = serialize.create_release_ical() |
| 50 | + |
| 51 | + # Assert |
| 52 | + cal = Calendar.from_ical(ical_str) |
| 53 | + first_event = cal.events[0] |
| 54 | + assert first_event.get('summary') == 'Python 1.6.0 alpha 1' |
| 55 | + assert str(first_event.get('dtstart').dt) == '2000-03-31' |
| 56 | + assert first_event. get( 'uid') == '[email protected]' |
| 57 | + assert first_event.get('url') == 'https://peps.python.org/pep-0160/' |
| 58 | + |
| 59 | + |
| 60 | +def test_create_release_ical_sorted_by_date(): |
| 61 | + # Act |
| 62 | + ical_str = serialize.create_release_ical() |
| 63 | + |
| 64 | + # Assert |
| 65 | + cal = Calendar.from_ical(ical_str) |
| 66 | + dates = [event.get('dtstart').dt for event in cal.events] |
| 67 | + assert dates == sorted(dates) |
0 commit comments