forked from rc/aircox
67 lines
2.2 KiB
Python
Executable File
67 lines
2.2 KiB
Python
Executable File
import datetime
|
|
import calendar
|
|
import logging
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from django.test import TestCase
|
|
from django.utils import timezone as tz
|
|
|
|
from aircox.models import *
|
|
|
|
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
|
|
|
|
|
|
|