def setUp(self):
        super(NotifyProprietairesTest, self).setUp()
        self.checker = CalendarActivity(self.pg)
        self.checker.connect()

        def now():
            return date(2010, 1, 1)

        self.checker.now = now

        def sendMail(pk, majDate):
            pass

        self.checker.sendFirstMail = sendMail
        self.checker.sendSecondMail = sendMail
class NotifyProprietairesTest(BaseTestCase):
    def setUp(self):
        super(NotifyProprietairesTest, self).setUp()
        self.checker = CalendarActivity(self.pg)
        self.checker.connect()

        def now():
            return date(2010, 1, 1)

        self.checker.now = now

        def sendMail(pk, majDate):
            pass

        self.checker.sendFirstMail = sendMail
        self.checker.sendSecondMail = sendMail

    def tearDown(self):
        super(NotifyProprietairesTest, self).tearDown()

    def testLastUpdate(self):
        self._fillDB()
        calendars = self.checker.getActiveCalendars()
        self.assertEqual(len(calendars), 2)
        cal1 = calendars[0]
        self.assertEqual(cal1.heb_calendrier_proprio_date_maj, date(2010, 1, 1))
        cal1 = calendars[1]
        self.assertEqual(cal1.heb_calendrier_proprio_date_maj, date(2010, 1, 2))

    def testOneMonthDelay(self):
        self._fillDB()
        session = self.checker.pg.session()
        query = session.query(Hebergement)
        query = query.filter(Hebergement.heb_pk == 3)
        heb = query.one()
        heb.heb_calendrier_proprio_date_maj = self.checker.now() + relativedelta(days=-29)
        session.add(heb)
        session.flush()
        calendars = self.checker.getActiveCalendars()
        cal2 = calendars[1]
        self.failIf(self.checker.mustBeNotified(cal2))

        notified, blocked = self.checker.checkCalendarActivity()
        self.assertEqual(len(notified), 0)
        self.assertEqual(len(blocked), 0)

        query = session.query(Hebergement)
        query = query.filter(Hebergement.heb_pk == 3)
        heb = query.one()
        heb.heb_calendrier_proprio_date_maj = self.checker.now() + relativedelta(days=-30)
        session.add(heb)
        session.flush()
        calendars = self.checker.getActiveCalendars()
        cal2 = calendars[1]
        self.failUnless(self.checker.mustBeNotified(cal2))

        notified, blocked = self.checker.checkCalendarActivity()
        self.assertEqual(len(notified), 1)
        self.assertEqual(len(blocked), 0)

        query = session.query(Hebergement)
        query = query.filter(Hebergement.heb_pk == 3)
        heb = query.one()
        heb.heb_calendrier_proprio_date_maj = self.checker.now() + relativedelta(days=-31)
        session.add(heb)
        session.flush()
        calendars = self.checker.getActiveCalendars()
        cal2 = calendars[1]
        self.failIf(self.checker.mustBeNotified(cal2))

        notified, blocked = self.checker.checkCalendarActivity()
        self.assertEqual(len(notified), 0)
        self.assertEqual(len(blocked), 0)

    def testCalendarBlocking(self):
        self._fillDB()
        session = self.checker.pg.session()
        query = session.query(Hebergement)
        query = query.filter(Hebergement.heb_pk == 3)
        heb = query.one()
        heb.heb_calendrier_proprio_date_maj = self.checker.now() + relativedelta(days=-40)
        session.add(heb)
        session.flush()
        calendars = self.checker.getActiveCalendars()
        cal2 = calendars[1]
        self.failUnless(self.checker.mustBeBlocked(cal2))

        query = session.query(Hebergement)
        query = query.filter(Hebergement.heb_pk == 3)
        heb = query.one()
        self.assertEqual(heb.heb_calendrier_proprio, "searchactif")

        notified, blocked = self.checker.checkCalendarActivity()
        self.assertEqual(len(notified), 0)
        self.assertEqual(len(blocked), 1)

        session = self.checker.pg.session()
        query = session.query(Hebergement)
        query = query.filter(Hebergement.heb_pk == 3)
        heb = query.one()
        self.assertEqual(heb.heb_calendrier_proprio, "bloque")