コード例 #1
0
    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
コード例 #2
0
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"
コード例 #3
0
    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
コード例 #4
0
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"
コード例 #5
0
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"
コード例 #6
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"
コード例 #7
0
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"
コード例 #8
0
def test_none_fieldvalue():

    field = RecurrenceField()
    value = None
    return_obj = field.clean(value)

    assert isinstance(return_obj, Recurrence) or return_obj is None
コード例 #9
0
    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'
コード例 #10
0
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"
コード例 #11
0
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"
コード例 #12
0
 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)
コード例 #13
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"
コード例 #14
0
 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)
コード例 #15
0
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
コード例 #16
0
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."
コード例 #17
0
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."
コード例 #18
0
 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)
コード例 #19
0
 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)
コード例 #20
0
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
コード例 #21
0
    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'
コード例 #22
0
    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'
コード例 #23
0
    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'
コード例 #24
0
    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'
コード例 #25
0
    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'
コード例 #26
0
def test_none_fieldvalue():
    field = RecurrenceField()
    value = None
    return_obj = field.clean(value)

    assert isinstance(return_obj, Recurrence) or return_obj is None