93 lines
2.7 KiB
Python
93 lines
2.7 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='
|
|
)
|
|
|
|
cell.user_external_template = 'some-key:{{ user_nameid }}'
|
|
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'
|
|
)
|