combo/tests/test_family.py

93 lines
2.6 KiB
Python

import json
from unittest import mock
import pytest
from django.core.cache import cache
from django.test.client import RequestFactory
from combo.apps.family.models import WeeklyAgendaCell
from combo.data.models import Page
from combo.utils import NothingInCacheException
pytestmark = pytest.mark.django_db
@pytest.fixture
def context():
ctx = {'request': RequestFactory().get('/')}
ctx['request'].user = None
ctx['request'].session = {}
return ctx
class MockUser:
email = 'foo@example.net'
is_authenticated = True
is_anonymous = False
def get_name_id(self):
return None
class MockUserWithNameId:
email = 'foo@example.net'
is_authenticated = True
is_anonymous = False
def get_name_id(self):
return 'xyz'
class MockedRequestResponse(mock.Mock):
status_code = 200
def json(self):
return json.loads(self.content)
def test_weeklyagenda_cell(settings, context):
settings.PUBLIK_FAMILY_CELL_ENABLED = True
page = Page.objects.create(title='Family', slug='index', template_name='standard')
cell = WeeklyAgendaCell.objects.create(page=page, placeholder='content', order=0)
context['request'].user = MockUser()
# query should fail as nothing is cached
cache.clear()
with pytest.raises(NothingInCacheException):
cell.render(context)
context['synchronous'] = True # to get fresh content
data = {'data': []}
with mock.patch('combo.utils.requests.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
# wrong url
assert (
requests_get.call_args_list[0][0][0]
== 'http://chrono.example.org/api/agendas/datetimes/?agendas=&user_external_id=:'
)
cell.agenda_reference = 'some-agenda'
cell.save()
context['request'].user = MockUserWithNameId()
with mock.patch('combo.utils.requests.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert (
requests_get.call_args_list[0][0][0]
== 'http://chrono.example.org/api/agendas/datetimes/?agendas=some-agenda&user_external_id=:xyz'
)
cell.user_external_id_key = 'some-key'
cell.save()
with mock.patch('combo.utils.requests.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert (
requests_get.call_args_list[0][0][0]
== 'http://chrono.example.org/api/agendas/datetimes/?agendas=some-agenda&user_external_id=some-key:xyz'
)