import arrow import pytest import pytz from faker import Faker from calendar_utils.models import Calendar pytestmark = pytest.mark.django_db fake = Faker() @pytest.mark.freeze_time("2020-02-02") def test_calendar__update_source(sample, mocker, snapshot): m_get = mocker.patch( "calendar_utils.models.requests.get", return_value=mocker.Mock(text=sample) ) url = "http://foo" cal = Calendar.objects.create(url=url) cal.update_source() m_get.assert_called_once_with(url) cal.refresh_from_db() assert cal.source == sample assert cal.last_update == arrow.get("2020-02-02").datetime snapshot.assert_match(cal.past_events) snapshot.assert_match(cal.future_events) @pytest.mark.freeze_time("2020-03-30") def test_calendar__update_source__unchanged_source(sample, mocker): m_get = mocker.patch( "calendar_utils.models.requests.get", return_value=mocker.Mock(text=sample) ) url = "http://foo" cal = Calendar.objects.create(url=url, source=sample) cal.update_source() m_get.assert_called_once_with(url) cal.refresh_from_db() assert cal.source == sample assert cal.last_update == arrow.get("2020-03-30").datetime assert cal.past_events is None assert cal.future_events is None def test_calendar__save_and_load_events(): past_events = [ { "begin": fake.date_time(tzinfo=pytz.UTC), "end": fake.date_time(tzinfo=pytz.UTC), }, { "begin": fake.date_time(tzinfo=pytz.UTC), "end": fake.date_time(tzinfo=pytz.UTC), }, ] future_events = [ { "begin": fake.date_time(tzinfo=pytz.UTC), "end": fake.date_time(tzinfo=pytz.UTC), }, ] cal = Calendar.objects.create( url=fake.url(), past_events=past_events, future_events=future_events ) cal.refresh_from_db() assert cal.past_events == past_events assert cal.future_events == future_events def test_calendar__save_and_load_events__no_values(): cal = Calendar.objects.create(url=fake.url()) cal.refresh_from_db() assert cal.past_events is None assert cal.future_events is None