Exemplo n.º 1
0
class TestConferenceSchedule(unittest.TestCase):
    """Tests the basic schedule management functions
    """
    def setUp(self):

        # create a context, for storing autoOps
        ContextManager.create()
        ContextManager.set('autoOps', [])

        a = Avatar()
        a.setId("creator")
        self._conf = ConferenceFacade(a)
        self._conf.setId('a')
        self._conf.setTimezone('UTC')

        self._conf.setDates(
            datetime(2009, 9, 21, 16, 0, 0, tzinfo=timezone("UTC")),
            datetime(2009, 9, 21, 19, 0, 0, tzinfo=timezone("UTC")))

        self._slot1_sDate = datetime(2009,
                                     9,
                                     21,
                                     17,
                                     0,
                                     0,
                                     tzinfo=timezone("UTC"))
        self._slot1_eDate = datetime(2009,
                                     9,
                                     21,
                                     18,
                                     0,
                                     0,
                                     tzinfo=timezone("UTC"))
        self._slot2_sDate = datetime(2009,
                                     9,
                                     21,
                                     18,
                                     0,
                                     0,
                                     tzinfo=timezone("UTC"))
        self._slot2_eDate = datetime(2009,
                                     9,
                                     21,
                                     19,
                                     0,
                                     0,
                                     tzinfo=timezone("UTC"))

        self._slot2_laterDate = datetime(2009,
                                         9,
                                         21,
                                         20,
                                         0,
                                         0,
                                         tzinfo=timezone("UTC"))

        self._session1 = Session()
        self._session1.setValues({
            'sDate': self._slot1_sDate,
            'eDate': self._slot1_eDate
        })

        self._conf.addSession(self._session1)

        self._slot1 = self._session1.getSlotById(0)
        self._slot2 = SessionSlot(self._session1)

        self._slot2.setValues({
            'sDate': self._slot2_sDate,
            'eDate': self._slot2_eDate
        })

        self._session1.addSlot(self._slot2)

    def tearDown(self):
        ContextManager.destroy()

    def _addContribToSession(self, session, sDate, duration):
        contrib = ContributionFacade()

        contrib.setParent(self._conf)

        session.addContribution(contrib)

        contrib.setDuration(duration, 0)
        contrib.setStartDate(sDate)

        return contrib

    def _expandNewTest(self, sDate, duration, expSDate, expEDate):
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)

        contrib = self._addContribToSession(self._session1, sDate, duration)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        self.assert_(self._slot2.getAdjustedStartDate() == expSDate)
        self.assert_(self._slot2.getAdjustedEndDate() == expEDate)

    def _expandResizeTest(self, sDate, sDuration, newDate, newDuration,
                          expSDate, expEDate):
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)

        contrib = self._addContribToSession(self._session1, sDate, sDuration)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        # changing time
        contrib.setStartDate(newDate)
        contrib.setDuration(dur=timedelta(hours=newDuration))

        self.assert_(self._slot2.getAdjustedStartDate() == expSDate)
        self.assert_(self._slot2.getAdjustedEndDate() == expEDate)

    def testNewContentExpandsSlotDown(self):
        """ A slot grows down due to new overflowing content """
        return self._expandNewTest(self._slot2_sDate, 2, self._slot2_sDate,
                                   self._slot2_laterDate)

    def testNotifyNewContentExpandsSlotDown(self):
        """ When a slot grows down (new content), proper notification is triggered  """

        self.testNewContentExpandsSlotDown()

        ops = ContextManager.get('autoOps')

        self.assert_(len(ops) == 4)

        op1 = ops[0]
        op2 = ops[1]
        op3 = ops[0]
        op4 = ops[1]

##         self.assert_(type(op1[0]) == SessionSlot)
##         self.assert_(op1[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op1[2]) == Session)
##         self.assert_(op1[3] == self._slot2_laterDate)

##         self.assert_(type(op2[0]) == SessionSlot)
##         self.assert_(op2[1] == 'OWNER_START_DATE_EXTENDED')
##         self.assert_(type(op2[2]) == SessionSlot)
##         self.assert_(op2[3] == self._slot1_sDate)

##         self.assert_(type(op3[0]) == SessionSlot)
##         self.assert_(op3[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op3[2]) == Session)
##         self.assert_(op3[3] == self._slot2_laterDate)

##         self.assert_(type(op4[0]) == SessionSlot)
##         self.assert_(op4[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op4[2]) == SessionSlot)
##         self.assert_(op4[3] == self._slot2_laterDate)

    def testNewContentExpandsSlotUp(self):
        """ A slot grows up due to new "underflowing" content """
        return self._expandNewTest(self._slot1_sDate, 2, self._slot1_sDate,
                                   self._slot2_eDate)

    def testNotifyNewContentExpandsSlotUp(self):
        """ When a slot grows up (new content), proper notification is triggered  """

        #        import rpdb2; rpdb2.start_embedded_debugger_interactive_password()

        self.testNewContentExpandsSlotUp()

        ops = ContextManager.get('autoOps')

        self.assert_(len(ops) == 3)

        op1 = ops[0]
        op2 = ops[1]


##         self.assert_(type(op1[0]) == SessionSlot)
##         self.assert_(op1[1] == 'OWNER_START_DATE_EXTENDED')
##         self.assert_(type(op1[2]) == SessionSlot)
##         self.assert_(op1[3] == self._slot1_sDate)
##         self.assert_(op1[4] == self._slot2_sDate)

##         # in an ideal world, this one should not be shown
##         self.assert_(type(op2[0]) == SessionSlot)
##         self.assert_(op2[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op2[2]) == SessionSlot)
##         self.assert_(op2[3] == self._slot2_eDate)
##         self.assert_(op2[4] == self._slot2_sDate)

    def testNewContentExpandsSlotBoth(self):
        """ A slot grows up due to new content that both "underflows" and overflows """
        self._expandNewTest(
            datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")), 3,
            self._slot1_sDate, self._slot2_laterDate)

    def testNewCrossingDoesNotCorruptSessionTime(self):
        """ Session start/end time does not get messed up by new overflowing content """
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)

        earlyDate = datetime(2009, 9, 21, 16, 0, 0, tzinfo=timezone("UTC"))

        contrib = self._addContribToSession(self._session1, earlyDate, 1)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        self.assert_(self._session1.getAdjustedStartDate() == earlyDate)
        self.assert_(self._session1.getAdjustedEndDate() == self._slot2_eDate)

    def testResizeContentExpandsSlotDown(self):
        """ A slot grows down by resizing content to overflow"""
        self._expandResizeTest(
            self._slot2_sDate, 1,
            datetime(2009, 9, 21, 18, 0, 0, tzinfo=timezone("UTC")), 2,
            self._slot2_sDate,
            datetime(2009, 9, 21, 20, 0, 0, tzinfo=timezone("UTC")))

    def testResizeContentExpandsSlotUp(self):
        """ A slot grows down by resizing content to "underflow" """
        self._expandNewTest(
            datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")), 2,
            datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
            self._slot2_eDate)

    def testResizeContentExpandsSlotBoth(self):
        """ A slot grows down by resizing content to bot "underflow" and overflow"""
        self._expandNewTest(
            datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")), 3,
            datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
            datetime(2009, 9, 21, 20, 0, 0, tzinfo=timezone("UTC")))

    def testResizeCrossingDoesNotCorruptSessionTime(self):
        """ Session start/end time does not get messed up by resizing content to overflow """
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)
        contrib = self._addContribToSession(self._session1, self._slot2_sDate,
                                            1)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        # changing time
        earlyDate = datetime(2009, 9, 21, 16, 0, 0, tzinfo=timezone("UTC"))
        contrib.setStartDate(earlyDate)

        self.assert_(self._session1.getAdjustedStartDate() == earlyDate)
        self.assert_(self._session1.getAdjustedEndDate() == self._slot2_eDate)
Exemplo n.º 2
0
class TestConferenceSchedule(unittest.TestCase):
    """Tests the basic schedule management functions
    """

    def setUp( self ):

        # create a context, for storing autoOps
        ContextManager.create()
        ContextManager.set('autoOps', [])

        a = Avatar()
        a.setId("creator")
        self._conf = ConferenceFacade( a )
        self._conf.setId('a')
        self._conf.setTimezone('UTC')

        self._conf.setDates(datetime(2009, 9, 21, 16, 0 ,0, tzinfo=timezone("UTC")),
                            datetime(2009, 9, 21, 19, 0 ,0, tzinfo=timezone("UTC")))

        self._slot1_sDate = datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC"))
        self._slot1_eDate = datetime(2009, 9, 21, 18, 0, 0, tzinfo=timezone("UTC"))
        self._slot2_sDate = datetime(2009, 9, 21, 18, 0, 0, tzinfo=timezone("UTC"))
        self._slot2_eDate = datetime(2009, 9, 21, 19, 0, 0, tzinfo=timezone("UTC"))

        self._slot2_laterDate = datetime(2009, 9, 21, 20, 0, 0, tzinfo=timezone("UTC"))

        self._session1 = Session()
        self._session1.setValues({
            'sDate': self._slot1_sDate,
            'eDate': self._slot1_eDate
            })

        self._conf.addSession(self._session1)

        self._slot1 = self._session1.getSlotById(0)
        self._slot2 = SessionSlot(self._session1)

        self._slot2.setValues({
            'sDate': self._slot2_sDate,
            'eDate': self._slot2_eDate
            });

        self._session1.addSlot(self._slot2)

    def tearDown(self):
        ContextManager.destroy()

    def _addContribToSession(self, session, sDate, duration):
        contrib = ContributionFacade()

        contrib.setParent(self._conf)

        session.addContribution(contrib)

        contrib.setDuration(duration,0)
        contrib.setStartDate(sDate)

        return contrib

    def _expandNewTest(self, sDate, duration, expSDate, expEDate):
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)

        contrib = self._addContribToSession(self._session1, sDate, duration)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        self.assert_(self._slot2.getAdjustedStartDate() == expSDate)
        self.assert_(self._slot2.getAdjustedEndDate() == expEDate)


    def _expandResizeTest(self, sDate, sDuration, newDate, newDuration, expSDate, expEDate):
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)

        contrib = self._addContribToSession(self._session1, sDate, sDuration)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        # changing time
        contrib.setStartDate(newDate)
        contrib.setDuration(dur=timedelta(hours=newDuration))

        self.assert_(self._slot2.getAdjustedStartDate() == expSDate)
        self.assert_(self._slot2.getAdjustedEndDate() == expEDate)

    def testNewContentExpandsSlotDown(self):
        """ A slot grows down due to new overflowing content """
        return self._expandNewTest(self._slot2_sDate,
                                   2,
                                   self._slot2_sDate,
                                   self._slot2_laterDate)

    def testNotifyNewContentExpandsSlotDown(self):
        """ When a slot grows down (new content), proper notification is triggered  """

        self.testNewContentExpandsSlotDown()

        ops = ContextManager.get('autoOps')

        self.assert_(len(ops) == 4)

        op1 = ops[0]
        op2 = ops[1]
        op3 = ops[0]
        op4 = ops[1]

##         self.assert_(type(op1[0]) == SessionSlot)
##         self.assert_(op1[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op1[2]) == Session)
##         self.assert_(op1[3] == self._slot2_laterDate)

##         self.assert_(type(op2[0]) == SessionSlot)
##         self.assert_(op2[1] == 'OWNER_START_DATE_EXTENDED')
##         self.assert_(type(op2[2]) == SessionSlot)
##         self.assert_(op2[3] == self._slot1_sDate)

##         self.assert_(type(op3[0]) == SessionSlot)
##         self.assert_(op3[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op3[2]) == Session)
##         self.assert_(op3[3] == self._slot2_laterDate)

##         self.assert_(type(op4[0]) == SessionSlot)
##         self.assert_(op4[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op4[2]) == SessionSlot)
##         self.assert_(op4[3] == self._slot2_laterDate)

    def testNewContentExpandsSlotUp(self):
        """ A slot grows up due to new "underflowing" content """
        return self._expandNewTest(self._slot1_sDate,
                                   2,
                                   self._slot1_sDate,
                                   self._slot2_eDate)

    def testNotifyNewContentExpandsSlotUp(self):
        """ When a slot grows up (new content), proper notification is triggered  """

#        import rpdb2; rpdb2.start_embedded_debugger_interactive_password()

        self.testNewContentExpandsSlotUp()

        ops = ContextManager.get('autoOps')

        self.assert_(len(ops) == 3)

        op1 = ops[0]
        op2 = ops[1]

##         self.assert_(type(op1[0]) == SessionSlot)
##         self.assert_(op1[1] == 'OWNER_START_DATE_EXTENDED')
##         self.assert_(type(op1[2]) == SessionSlot)
##         self.assert_(op1[3] == self._slot1_sDate)
##         self.assert_(op1[4] == self._slot2_sDate)

##         # in an ideal world, this one should not be shown
##         self.assert_(type(op2[0]) == SessionSlot)
##         self.assert_(op2[1] == 'OWNER_END_DATE_EXTENDED')
##         self.assert_(type(op2[2]) == SessionSlot)
##         self.assert_(op2[3] == self._slot2_eDate)
##         self.assert_(op2[4] == self._slot2_sDate)

    def testNewContentExpandsSlotBoth(self):
        """ A slot grows up due to new content that both "underflows" and overflows """
        self._expandNewTest(datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
                            3,
                            self._slot1_sDate,
                            self._slot2_laterDate)

    def testNewCrossingDoesNotCorruptSessionTime(self):
        """ Session start/end time does not get messed up by new overflowing content """
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)

        earlyDate = datetime(2009, 9, 21, 16, 0, 0, tzinfo=timezone("UTC"))

        contrib = self._addContribToSession(self._session1, earlyDate, 1)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        self.assert_(self._session1.getAdjustedStartDate() == earlyDate)
        self.assert_(self._session1.getAdjustedEndDate() == self._slot2_eDate)

    def testResizeContentExpandsSlotDown(self):
        """ A slot grows down by resizing content to overflow"""
        self._expandResizeTest(self._slot2_sDate,
                         1,
                         datetime(2009, 9, 21, 18, 0, 0, tzinfo=timezone("UTC")),
                         2,
                         self._slot2_sDate,
                         datetime(2009, 9, 21, 20, 0, 0, tzinfo=timezone("UTC")))

    def testResizeContentExpandsSlotUp(self):
        """ A slot grows down by resizing content to "underflow" """
        self._expandNewTest(datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
                         2,
                         datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
                         self._slot2_eDate)

    def testResizeContentExpandsSlotBoth(self):
        """ A slot grows down by resizing content to bot "underflow" and overflow"""
        self._expandNewTest(datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
                         3,
                         datetime(2009, 9, 21, 17, 0, 0, tzinfo=timezone("UTC")),
                         datetime(2009, 9, 21, 20, 0, 0, tzinfo=timezone("UTC")))

    def testResizeCrossingDoesNotCorruptSessionTime(self):
        """ Session start/end time does not get messed up by resizing content to overflow """
        from MaKaC.schedule import ConferenceSchedule

        schedule = ConferenceSchedule(self._conf)
        contrib = self._addContribToSession(self._session1, self._slot2_sDate, 1)

        # scheduling
        self._slot2.getSchedule().addEntry(contrib.getSchEntry())

        # changing time
        earlyDate = datetime(2009, 9, 21, 16, 0, 0, tzinfo=timezone("UTC"))
        contrib.setStartDate(earlyDate)

        self.assert_(self._session1.getAdjustedStartDate() == earlyDate)
        self.assert_(self._session1.getAdjustedEndDate() == self._slot2_eDate)