コード例 #1
0
 def testPostponementOccurenceLast(self):
     request = RequestFactory().get("/test")
     request.user = self.user
     request.session = {}
     event = RecurringEventPage(owner=self.user,
                                slug="breakfast3",
                                title="Breakfast-in-bed",
                                repeat=Recurrence(dtstart=dt.date(
                                    2008, 2, 1),
                                                  until=dt.date(2008, 5, 9),
                                                  freq=WEEKLY,
                                                  byweekday=[SA, SU]),
                                time_from=dt.time(8),
                                time_to=dt.time(9))
     self.calendar.add_child(instance=event)
     postponement = PostponementPage(
         owner=self.user,
         overrides=event,
         except_date=dt.date(2008, 5, 3),
         postponement_title="Breakfast in Bed owed from May",
         date=dt.date(2008, 5, 24),
         time_from=dt.time(8),
         time_to=dt.time(9))
     event.add_child(instance=postponement)
     self.assertIsNone(event.status)
     self.assertEqual(
         event._nextOn(request),
         '<a class="inline-link" href="/events/breakfast3/2008-05-03-postponement/">Saturday 24th of May at 8am</a>'
     )
コード例 #2
0
class TestPostponement(TestCase):
    def setUp(self):
        self.home = Page.objects.get(slug='home')
        self.user = User.objects.create_user('j', '*****@*****.**', 's3(r3t')
        self.request = RequestFactory().get("/test")
        self.request.user = self.user
        self.request.session = {}
        self.calendar = GeneralCalendarPage(owner=self.user,
                                            slug="events",
                                            title="Events")
        self.home.add_child(instance=self.calendar)
        self.calendar.save_revision().publish()
        self.event = RecurringEventPage(slug="test-meeting",
                                        title="Test Meeting",
                                        repeat=Recurrence(
                                            dtstart=dt.date(1990, 1, 1),
                                            freq=WEEKLY,
                                            byweekday=[MO, WE, FR]),
                                        time_from=dt.time(13, 30),
                                        time_to=dt.time(16))
        self.calendar.add_child(instance=self.event)
        self.postponement = PostponementPage(
            owner=self.user,
            overrides=self.event,
            except_date=dt.date(1990, 10, 10),
            cancellation_title="Meeting Postponed",
            cancellation_details=
            "The meeting has been postponed until tomorrow",
            postponement_title="A Meeting",
            date=dt.date(1990, 10, 11),
            time_from=dt.time(13),
            time_to=dt.time(16, 30),
            details="Yes a test meeting on a Thursday")
        self.event.add_child(instance=self.postponement)
        self.postponement.save_revision().publish()

    def testGetEventsByDay(self):
        events = RecurringEventPage.events.byDay(dt.date(1990, 10, 1),
                                                 dt.date(1990, 10, 31))
        self.assertEqual(len(events), 31)
        evod = events[9]
        self.assertEqual(evod.date, dt.date(1990, 10, 10))
        self.assertEqual(len(evod.days_events), 1)
        self.assertEqual(len(evod.continuing_events), 0)
        title, page = evod.days_events[0]
        self.assertEqual(title, "Meeting Postponed")
        self.assertIs(type(page), CancellationPage)
        self.assertIs(type(page.postponementpage), PostponementPage)

        events = PostponementPage.events.byDay(dt.date(1990, 10, 1),
                                               dt.date(1990, 10, 31))
        self.assertEqual(len(events), 31)
        evod = events[10]
        self.assertEqual(evod.date, dt.date(1990, 10, 11))
        self.assertEqual(len(evod.days_events), 1)
        self.assertEqual(len(evod.continuing_events), 0)
        title, page = evod.days_events[0]
        self.assertEqual(title, "A Meeting")
        self.assertIs(type(page), PostponementPage)

    def testStatus(self):
        self.assertEqual(self.postponement.status, "finished")
        self.assertEqual(self.postponement.status_text,
                         "This event has finished.")
        now = timezone.localtime()
        myday = now.date() + dt.timedelta(1)
        friday = myday + dt.timedelta(days=(4 - myday.weekday()) % 7)
        futureEvent = PostponementPage(
            owner=self.user,
            overrides=self.event,
            except_date=friday,
            cancellation_title="",
            cancellation_details="",
            postponement_title="Tuesday Meeting",
            date=friday + dt.timedelta(days=4),
            time_from=dt.time(13, 30),
            time_to=dt.time(16),
            details="The meeting postponed from last Friday")
        self.event.add_child(instance=futureEvent)
        self.assertIsNone(futureEvent.status)
        self.assertEqual(futureEvent.status_text, "")

    def testWhen(self):
        self.assertEqual(self.postponement.when,
                         "Thursday 11th of October 1990 at 1pm to 4:30pm")

    def testAt(self):
        self.assertEqual(self.postponement.at.strip(), "1pm")
        nextDate = self.event.next_date
        newDate = nextDate + dt.timedelta(1)
        reschedule = PostponementPage(
            owner=self.user,
            overrides=self.event,
            except_date=nextDate,
            cancellation_title="",
            cancellation_details="",
            postponement_title="Early Meeting",
            date=newDate,
            time_from=dt.time(8, 30),
            time_to=dt.time(11),
            details="The meeting will be held early tomorrow")
        self.event.add_child(instance=reschedule)
        nextOn = self.event._nextOn(self.request)
        url = "/events/test-meeting/{}-postponement/".format(nextDate)
        self.assertEqual(nextOn[:76],
                         '<a class="inline-link" href="{}">'.format(url))
        self.assertEqual(nextOn[-4:], '</a>')
        parts = nextOn[76:-4].split()
        self.assertEqual(len(parts), 6)
        self.assertEqual(parts[0], "{:%A}".format(newDate))
        self.assertEqual(int(parts[1][:-2]), newDate.day)
        self.assertIn(parts[1][-2:], ["st", "nd", "rd", "th"])
        self.assertEqual(parts[2], "of")
        self.assertEqual(parts[3], "{:%B}".format(newDate))
        self.assertEqual(parts[4], "at")
        self.assertEqual(parts[5], "8:30am")