def test_strip_dtstart_and_dtend_if_required(self): """Test that naive datetimes will get converted to UTC and returned as UTC.""" rule = Rule(recurrence.WEEKLY) limits = Recurrence(dtstart=datetime(2014, 1, 1, 0, 0, 0), dtend=datetime(2014, 2, 3, 0, 0, 0), rrules=[rule]) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rrules == [rule] assert cleaned_value.dtstart == datetime(2014, 1, 1, 0, 0, 0, tzinfo=pytz.utc) assert cleaned_value.dtend == datetime(2014, 2, 3, 0, 0, 0, tzinfo=pytz.utc) field = RecurrenceField(accept_dtstart=False, accept_dtend=False) cleaned_value = field.clean(value) assert cleaned_value != limits assert cleaned_value.dtstart is None assert cleaned_value.dtend is None
def test_clean_invalid_value(): field = RecurrenceField() value = "RRULE:FREQS=WEEKLY" with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "bad parameter: FREQS"
def test_strip_dtstart_and_dtend_if_required(self): """Test that naive datetimes will get converted to UTC and returned as UTC.""" rule = Rule( recurrence.WEEKLY ) limits = Recurrence( dtstart=datetime(2014, 1, 1, 0, 0, 0), dtend=datetime(2014, 2, 3, 0, 0, 0), rrules=[rule] ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rrules == [rule] assert cleaned_value.dtstart == datetime(2014, 1, 1, 0, 0, 0, tzinfo=pytz.utc) assert cleaned_value.dtend == datetime(2014, 2, 3, 0, 0, 0, tzinfo=pytz.utc) field = RecurrenceField(accept_dtstart=False, accept_dtend=False) cleaned_value = field.clean(value) assert cleaned_value != limits assert cleaned_value.dtstart is None assert cleaned_value.dtend is None
def test_clean_invalid_value(): field = RecurrenceField() value = "RRULE:FREQS=WEEKLY" with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "bad parameter: FREQS"
def test_check_max_rrules(): rule = Rule(recurrence.WEEKLY) limits = Recurrence(rrules=[rule]) value = recurrence.serialize(limits) field = RecurrenceField(max_rrules=0) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Max rules exceeded. The limit is 0"
def test_check_max_rdates(): limits = Recurrence(rdates=[ datetime(2014, 1, 1, 0, 0, 0), datetime(2014, 1, 2, 0, 0, 0), ]) value = recurrence.serialize(limits) field = RecurrenceField(max_rdates=2) field.clean(value) field = RecurrenceField(max_rdates=1) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Max dates exceeded. The limit is 1"
def test_check_max_rrules(): rule = Rule( recurrence.WEEKLY ) limits = Recurrence( rrules=[rule] ) value = recurrence.serialize(limits) field = RecurrenceField(max_rrules=0) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Max rules exceeded. The limit is 0"
def test_none_fieldvalue(): field = RecurrenceField() value = None return_obj = field.clean(value) assert isinstance(return_obj, Recurrence) or return_obj is None
def test_dt_start_and_dtend_converts_to_utc(self): """Convert the values for dtstart and dtend to UTC.""" tz = pytz.timezone('America/Adak') limits = Recurrence( dtstart=datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz), dtend=datetime(2014, 2, 3, 0, 0, 0, tzinfo=tz), ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.dtstart == datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz).astimezone( pytz.utc) assert cleaned_value.dtend == datetime(2014, 2, 3, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc) assert cleaned_value.dtstart.tzname() == 'UTC' assert cleaned_value.dtend.tzname() == 'UTC'
def test_clean_normal_value(): field = RecurrenceField() value = "RRULE:FREQ=WEEKLY;BYDAY=TU" obj = field.clean(value) assert len(obj.rrules) == 1 assert obj.rrules[0].to_text() == "weekly, each Tuesday"
def test_clean_normal_value(): field = RecurrenceField() value = "RRULE:FREQ=WEEKLY;BYDAY=TU" obj = field.clean(value) assert len(obj.rrules) == 1 assert obj.rrules[0].to_text() == "weekly, each Tuesday"
def test_aware_until_gets_converted_to_utc(self): tz = pytz.timezone('America/Adak') until = datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz) recurs = Recurrence(rrules=[Rule(recurrence.DAILY, until=until)], ) value = recurrence.serialize(recurs) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rrules[0].until == until.astimezone(pytz.utc)
def test_check_max_rdates(): limits = Recurrence( rdates=[ datetime(2014, 1, 1, 0, 0, 0), datetime(2014, 1, 2, 0, 0, 0), ] ) value = recurrence.serialize(limits) field = RecurrenceField(max_rdates=2) field.clean(value) field = RecurrenceField(max_rdates=1) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Max dates exceeded. The limit is 1"
def test_naive_until_gets_converted_to_utc(self): recurs = Recurrence( rrules=[Rule( recurrence.DAILY, until=datetime(2014, 1, 1, 0, 0, 0)) ], ) value = recurrence.serialize(recurs) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rrules[0].until == datetime(2014, 1, 1, 0, 0, 0, tzinfo=pytz.utc)
def test_strip_dtstart_and_dtend_if_required(): rule = Rule(recurrence.WEEKLY) limits = Recurrence(dtstart=datetime(2014, 1, 1, 0, 0, 0), dtend=datetime(2014, 2, 3, 0, 0, 0), rrules=[rule]) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value == limits assert cleaned_value.dtstart == datetime(2014, 1, 1, 0, 0, 0) assert cleaned_value.dtend == datetime(2014, 2, 3, 0, 0, 0) field = RecurrenceField(accept_dtstart=False, accept_dtend=False) cleaned_value = field.clean(value) assert cleaned_value != limits assert cleaned_value.dtstart is None assert cleaned_value.dtend is None
def test_check_allowable_frequencies(): rule = Rule( recurrence.WEEKLY ) limits = Recurrence( rrules=[rule] ) value = recurrence.serialize(limits) field = RecurrenceField(frequencies=[ recurrence.WEEKLY ]) field.clean(value) field = RecurrenceField(frequencies=[ recurrence.YEARLY ]) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Invalid frequency." limits = Recurrence( exrules=[rule] ) value = recurrence.serialize(limits) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Invalid frequency."
def test_check_allowable_frequencies(): rule = Rule( recurrence.WEEKLY ) limits = Recurrence( rrules=[rule] ) value = recurrence.serialize(limits) field = RecurrenceField(frequencies=[ recurrence.WEEKLY ]) field.clean(value) field = RecurrenceField(frequencies=[ recurrence.YEARLY ]) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Invalid frequency." limits = Recurrence( exrules=[rule] ) value = recurrence.serialize(limits) with pytest.raises(forms.ValidationError) as e: field.clean(value) assert e.value.messages[0] == "Invalid frequency."
def test_aware_until_gets_converted_to_utc(self): tz = pytz.timezone('America/Adak') until = datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz) recurs = Recurrence( rrules=[Rule( recurrence.DAILY, until=until) ], ) value = recurrence.serialize(recurs) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rrules[0].until == until.astimezone(pytz.utc)
def test_naive_until_gets_converted_to_utc(self): recurs = Recurrence(rrules=[ Rule(recurrence.DAILY, until=datetime(2014, 1, 1, 0, 0, 0)) ], ) value = recurrence.serialize(recurs) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rrules[0].until == datetime(2014, 1, 1, 0, 0, 0, tzinfo=pytz.utc)
def test_strip_dtstart_and_dtend_if_required(): rule = Rule( recurrence.WEEKLY ) limits = Recurrence( dtstart=datetime(2014, 1, 1, 0, 0, 0), dtend=datetime(2014, 2, 3, 0, 0, 0), rrules=[rule] ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value == limits assert cleaned_value.dtstart == datetime(2014, 1, 1, 0, 0, 0) assert cleaned_value.dtend == datetime(2014, 2, 3, 0, 0, 0) field = RecurrenceField(accept_dtstart=False, accept_dtend=False) cleaned_value = field.clean(value) assert cleaned_value != limits assert cleaned_value.dtstart is None assert cleaned_value.dtend is None
def test_naive_rdates_converted_to_utc(self): limits = Recurrence(rdates=[ datetime(2014, 1, 1, 0, 0, 0), datetime(2014, 1, 2, 0, 0, 0), ], ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rdates == [ datetime(2014, 1, 1, 0, 0, 0, tzinfo=pytz.utc), datetime(2014, 1, 2, 0, 0, 0, tzinfo=pytz.utc), ] for rdate in cleaned_value.rdates: assert rdate.tzname() == 'UTC'
def test_dt_start_and_dtend_converts_to_utc(self): """Convert the values for dtstart and dtend to UTC.""" tz = pytz.timezone('America/Adak') limits = Recurrence( dtstart=datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz), dtend=datetime(2014, 2, 3, 0, 0, 0, tzinfo=tz), ) value = recurrence.serialize(limits) field = RecurrenceField(required=False) cleaned_value = field.clean(value) assert cleaned_value.dtstart == datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc) assert cleaned_value.dtend == datetime(2014, 2, 3, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc) assert cleaned_value.dtstart.tzname() == 'UTC' assert cleaned_value.dtend.tzname() == 'UTC'
def test_aware_rdates_converted_to_utc(self): tz = pytz.timezone('America/Adak') limits = Recurrence(rdates=[ datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz), datetime(2014, 1, 2, 0, 0, 0, tzinfo=tz), ], ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rdates == [ datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc), datetime(2014, 1, 2, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc), ] for rdate in cleaned_value.rdates: assert rdate.tzname() == 'UTC'
def test_naive_rdates_converted_to_utc(self): limits = Recurrence( rdates=[ datetime(2014, 1, 1, 0, 0, 0), datetime(2014, 1, 2, 0, 0, 0), ], ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rdates == [ datetime(2014, 1, 1, 0, 0, 0, tzinfo=pytz.utc), datetime(2014, 1, 2, 0, 0, 0, tzinfo=pytz.utc), ] for rdate in cleaned_value.rdates: assert rdate.tzname() == 'UTC'
def test_aware_rdates_converted_to_utc(self): tz = pytz.timezone('America/Adak') limits = Recurrence( rdates=[ datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz), datetime(2014, 1, 2, 0, 0, 0, tzinfo=tz), ], ) value = recurrence.serialize(limits) field = RecurrenceField() cleaned_value = field.clean(value) assert cleaned_value.rdates == [ datetime(2014, 1, 1, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc), datetime(2014, 1, 2, 0, 0, 0, tzinfo=tz).astimezone(pytz.utc), ] for rdate in cleaned_value.rdates: assert rdate.tzname() == 'UTC'
def test_none_fieldvalue(): field = RecurrenceField() value = None return_obj = field.clean(value) assert isinstance(return_obj, Recurrence) or return_obj is None