#93: reorganise Rerun, Diffusion, Schedule module #95
@ -1,66 +0,0 @@
 | 
			
		||||
import calendar
 | 
			
		||||
import datetime
 | 
			
		||||
import logging
 | 
			
		||||
 | 
			
		||||
from dateutil.relativedelta import relativedelta
 | 
			
		||||
from django.test import TestCase
 | 
			
		||||
from django.utils import timezone as tz
 | 
			
		||||
 | 
			
		||||
from aircox.models import Schedule
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger("aircox.test")
 | 
			
		||||
logger.setLevel("INFO")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ScheduleCheck(TestCase):
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.schedules = [
 | 
			
		||||
            Schedule(
 | 
			
		||||
                date=tz.now(),
 | 
			
		||||
                duration=datetime.time(1, 30),
 | 
			
		||||
                frequency=frequency,
 | 
			
		||||
            )
 | 
			
		||||
            for frequency in Schedule.Frequency.__members__.values()
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
    def test_frequencies(self):
 | 
			
		||||
        for schedule in self.schedules:
 | 
			
		||||
            logger.info(
 | 
			
		||||
                "- test frequency %s" % schedule.get_frequency_display()
 | 
			
		||||
            )
 | 
			
		||||
            date = schedule.date
 | 
			
		||||
            count = 24
 | 
			
		||||
            while count:
 | 
			
		||||
                logger.info(
 | 
			
		||||
                    "- month %(month)s/%(year)s"
 | 
			
		||||
                    % {"month": date.month, "year": date.year}
 | 
			
		||||
                )
 | 
			
		||||
                count -= 1
 | 
			
		||||
                dates = schedule.dates_of_month(date)
 | 
			
		||||
                if schedule.frequency == schedule.Frequency.one_on_two:
 | 
			
		||||
                    self.check_one_on_two(schedule, date, dates)
 | 
			
		||||
                elif schedule.frequency == schedule.Frequency.last:
 | 
			
		||||
                    self.check_last(schedule, date, dates)
 | 
			
		||||
                else:
 | 
			
		||||
                    pass
 | 
			
		||||
                date += relativedelta(months=1)
 | 
			
		||||
 | 
			
		||||
    def check_one_on_two(self, schedule, date, dates):
 | 
			
		||||
        for date in dates:
 | 
			
		||||
            delta = date.date() - schedule.date.date()
 | 
			
		||||
            self.assertEqual(delta.days % 14, 0)
 | 
			
		||||
 | 
			
		||||
    def check_last(self, schedule, date, dates):
 | 
			
		||||
        month_info = calendar.monthrange(date.year, date.month)
 | 
			
		||||
        date = datetime.date(date.year, date.month, month_info[1])
 | 
			
		||||
 | 
			
		||||
        # end of month before the wanted weekday: move one week back
 | 
			
		||||
        if date.weekday() < schedule.date.weekday():
 | 
			
		||||
            date -= datetime.timedelta(days=7)
 | 
			
		||||
 | 
			
		||||
        date -= datetime.timedelta(days=date.weekday())
 | 
			
		||||
        date += datetime.timedelta(days=schedule.date.weekday())
 | 
			
		||||
        self.assertEqual(date, dates[0].date())
 | 
			
		||||
 | 
			
		||||
    def check_n_of_week(self, schedule, date, dates):
 | 
			
		||||
        pass
 | 
			
		||||
		Reference in New Issue
	
	Block a user