ungana

Client application that creates customized .ics files for ticket booking and event reservations
Info | Log | Files | Refs | README

test_ical_helper.py (2444B)


      1 import os
      2 import unittest
      3 from datetime import datetime, timedelta, timezone
      4 from icalendar import Calendar, Event
      5 from ungana.ical.ical_helper import ICalHelper
      6 
      7 
      8 class TestICalHelper(unittest.TestCase):
      9 
     10     def setUp(self):
     11         self.cal = Calendar()
     12         self.event = Event()
     13         self.event.add("UID", "12345")
     14         self.event.add("DTSTART", datetime(2025, 9, 6, 10, 0, tzinfo=timezone.utc))
     15         self.event.add("DTEND", datetime(2025, 9, 6, 11, 0, tzinfo=timezone.utc))
     16         self.event.add("SUMMARY", "Gophers Meetup")
     17         self.cal.add_component(self.event)
     18 
     19     def test_update_event_summary(self):
     20         updates = {"SUMMARY": "Gophers Weekly Meetup"}
     21         updated = ICalHelper.update_event(self.cal, updates)
     22         ev = ICalHelper.get_first_event(updated)
     23         self.assertEqual(str(ev["SUMMARY"]), "Gophers Weekly Meetup")
     24 
     25     def test_update_event_with_url_role(self):
     26         updates = {"URL;ROLE=HOST": "http://gophers.org"}
     27         updated = ICalHelper.update_event(self.cal, updates)
     28         ev = ICalHelper.get_first_event(updated)
     29         urls = ev.get("URL")
     30         self.assertIn("HOST", urls.params["ROLE"])
     31 
     32     def test_get_first_event_and_all_events(self):
     33         first = ICalHelper.get_first_event(self.cal)
     34         self.assertEqual(str(first["SUMMARY"]), "Gophers Meetup")
     35         all_events = ICalHelper.get_all_events(self.cal)
     36         self.assertEqual(len(all_events), 1)
     37 
     38     def test_normalize_ical_field_datetime_with_tzid(self):
     39         dt = datetime(2025, 9, 6, 10, 0)  # naive
     40         #normalized = ICalHelper.normalize_ical_field(dt, "UTC")
     41         normalized = ICalHelper.normalize_ical_field(dt, "Africa/Nairobi")
     42         self.assertIsNotNone(normalized.tzinfo)
     43 
     44     def test_check_existing_event_true(self):
     45         exists = ICalHelper.check_existing_event(self.cal, self.event)
     46         self.assertTrue(exists)
     47 
     48     def test_check_existing_event_false(self):
     49         ev = Event()
     50         ev.add("DTSTART", datetime(2025, 9, 7, 10, 0, tzinfo=timezone.utc))
     51         ev.add("DTEND", datetime(2025, 9, 7, 11, 0, tzinfo=timezone.utc))
     52         ev.add("SUMMARY", "Gophers meetup")
     53         exists = ICalHelper.check_existing_event(self.cal, ev)
     54         self.assertFalse(exists)
     55 
     56     def test_update_event_invalid_calendar(self):
     57         with self.assertRaises(ValueError):
     58             ICalHelper.update_event(None, {"SUMMARY": "x"})
     59 
     60 
     61 if __name__ == "__main__":
     62     unittest.main()