api: add resources list on agenda details (#38942)
This commit is contained in:
parent
b1b92bfa5c
commit
4cc1bf6c45
|
@ -233,6 +233,10 @@ def get_agenda_detail(request, agenda):
|
|||
'maximal_booking_delay': agenda.maximal_booking_delay,
|
||||
}
|
||||
|
||||
if agenda.kind == 'meetings':
|
||||
agenda_detail['resources'] = [
|
||||
{'id': r.slug, 'text': r.label, 'description': r.description} for r in agenda.resources.all()
|
||||
]
|
||||
if agenda.kind == 'events':
|
||||
agenda_detail['api'] = {
|
||||
'datetimes_url': request.build_absolute_uri(
|
||||
|
@ -279,7 +283,7 @@ class Agendas(APIView):
|
|||
permission_classes = ()
|
||||
|
||||
def get(self, request, format=None):
|
||||
agendas_queryset = Agenda.objects.all().order_by('label')
|
||||
agendas_queryset = Agenda.objects.all().prefetch_related('resources').order_by('label')
|
||||
if 'q' in request.GET:
|
||||
if not request.GET['q']:
|
||||
return Response({'data': []})
|
||||
|
|
|
@ -14,11 +14,12 @@ from django.utils.timezone import now, make_aware, localtime
|
|||
|
||||
from chrono.agendas.models import (
|
||||
Agenda,
|
||||
Event,
|
||||
Booking,
|
||||
MeetingType,
|
||||
TimePeriod,
|
||||
Desk,
|
||||
Event,
|
||||
MeetingType,
|
||||
Resource,
|
||||
TimePeriod,
|
||||
TimePeriodException,
|
||||
VirtualMember,
|
||||
)
|
||||
|
@ -127,10 +128,16 @@ def virtual_meetings_agenda(meetings_agenda):
|
|||
return agenda
|
||||
|
||||
|
||||
def test_agendas_api(app, some_data, meetings_agenda):
|
||||
agenda1 = Agenda.objects.filter(label=u'Foo bar')[0]
|
||||
agenda2 = Agenda.objects.filter(label=u'Foo bar 2')[0]
|
||||
virtual_agenda = Agenda.objects.create(
|
||||
def test_agendas_api(app):
|
||||
Agenda.objects.create(label='Foo bar')
|
||||
Agenda.objects.create(label='Foo bar 2')
|
||||
meetings_agenda1 = Agenda.objects.create(label='Foo bar Meeting', kind='meetings')
|
||||
Agenda.objects.create(label='Foo bar Meeting 2', kind='meetings')
|
||||
resource1 = Resource.objects.create(label='Resource 1', description='Foo bar Resource 1')
|
||||
resource2 = Resource.objects.create(label='Resource 2', description='Foo bar Resource 2')
|
||||
Resource.objects.create(label='Resource 3')
|
||||
meetings_agenda1.resources.add(resource1, resource2)
|
||||
Agenda.objects.create(
|
||||
label='Virtual Agenda', kind='virtual', minimal_booking_delay=1, maximal_booking_delay=56
|
||||
)
|
||||
resp = app.get('/api/agenda/')
|
||||
|
@ -138,39 +145,57 @@ def test_agendas_api(app, some_data, meetings_agenda):
|
|||
'data': [
|
||||
{
|
||||
'text': 'Foo bar',
|
||||
'id': u'foo-bar',
|
||||
'id': 'foo-bar',
|
||||
'slug': 'foo-bar',
|
||||
'kind': 'events',
|
||||
'minimal_booking_delay': 1,
|
||||
'maximal_booking_delay': 56,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda1.slug,
|
||||
'fillslots_url': 'http://testserver/api/agenda/%s/fillslots/' % agenda1.slug,
|
||||
'datetimes_url': 'http://testserver/api/agenda/foo-bar/datetimes/',
|
||||
'fillslots_url': 'http://testserver/api/agenda/foo-bar/fillslots/',
|
||||
},
|
||||
},
|
||||
{
|
||||
'text': 'Foo bar 2',
|
||||
'id': u'foo-bar-2',
|
||||
'id': 'foo-bar-2',
|
||||
'kind': 'events',
|
||||
'slug': 'foo-bar-2',
|
||||
'minimal_booking_delay': 1,
|
||||
'maximal_booking_delay': 56,
|
||||
'api': {
|
||||
'datetimes_url': 'http://testserver/api/agenda/%s/datetimes/' % agenda2.slug,
|
||||
'fillslots_url': 'http://testserver/api/agenda/%s/fillslots/' % agenda2.slug,
|
||||
'datetimes_url': 'http://testserver/api/agenda/foo-bar-2/datetimes/',
|
||||
'fillslots_url': 'http://testserver/api/agenda/foo-bar-2/fillslots/',
|
||||
},
|
||||
},
|
||||
{
|
||||
'text': 'Foo bar Meeting',
|
||||
'id': u'foo-bar-meeting',
|
||||
'id': 'foo-bar-meeting',
|
||||
'slug': 'foo-bar-meeting',
|
||||
'minimal_booking_delay': 1,
|
||||
'maximal_booking_delay': 56,
|
||||
'kind': 'meetings',
|
||||
'resources': [
|
||||
{'id': 'resource-1', 'text': 'Resource 1', 'description': 'Foo bar Resource 1'},
|
||||
{'id': 'resource-2', 'text': 'Resource 2', 'description': 'Foo bar Resource 2'},
|
||||
],
|
||||
'api': {
|
||||
'meetings_url': 'http://testserver/api/agenda/%s/meetings/' % meetings_agenda.slug,
|
||||
'desks_url': 'http://testserver/api/agenda/%s/desks/' % meetings_agenda.slug,
|
||||
'fillslots_url': 'http://testserver/api/agenda/%s/fillslots/' % meetings_agenda.slug,
|
||||
'meetings_url': 'http://testserver/api/agenda/foo-bar-meeting/meetings/',
|
||||
'desks_url': 'http://testserver/api/agenda/foo-bar-meeting/desks/',
|
||||
'fillslots_url': 'http://testserver/api/agenda/foo-bar-meeting/fillslots/',
|
||||
},
|
||||
},
|
||||
{
|
||||
'text': 'Foo bar Meeting 2',
|
||||
'id': 'foo-bar-meeting-2',
|
||||
'slug': 'foo-bar-meeting-2',
|
||||
'minimal_booking_delay': 1,
|
||||
'maximal_booking_delay': 56,
|
||||
'kind': 'meetings',
|
||||
'resources': [],
|
||||
'api': {
|
||||
'meetings_url': 'http://testserver/api/agenda/foo-bar-meeting-2/meetings/',
|
||||
'desks_url': 'http://testserver/api/agenda/foo-bar-meeting-2/desks/',
|
||||
'fillslots_url': 'http://testserver/api/agenda/foo-bar-meeting-2/fillslots/',
|
||||
},
|
||||
},
|
||||
{
|
||||
|
@ -181,21 +206,28 @@ def test_agendas_api(app, some_data, meetings_agenda):
|
|||
'maximal_booking_delay': 56,
|
||||
'kind': 'virtual',
|
||||
'api': {
|
||||
'meetings_url': 'http://testserver/api/agenda/%s/meetings/' % virtual_agenda.slug,
|
||||
'desks_url': 'http://testserver/api/agenda/%s/desks/' % virtual_agenda.slug,
|
||||
'fillslots_url': 'http://testserver/api/agenda/%s/fillslots/' % virtual_agenda.slug,
|
||||
'meetings_url': 'http://testserver/api/agenda/virtual-agenda/meetings/',
|
||||
'desks_url': 'http://testserver/api/agenda/virtual-agenda/desks/',
|
||||
'fillslots_url': 'http://testserver/api/agenda/virtual-agenda/fillslots/',
|
||||
},
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
resp = app.get('/api/agenda/', params={'q': 'foo'})
|
||||
assert len(resp.json['data']) == 3
|
||||
assert len(resp.json['data']) == 4
|
||||
resp = app.get('/api/agenda/', params={'q': 'MEET'})
|
||||
assert len(resp.json['data']) == 1
|
||||
assert len(resp.json['data']) == 2
|
||||
resp = app.get('/api/agenda/', params={'q': ''})
|
||||
assert len(resp.json['data']) == 0
|
||||
|
||||
with CaptureQueriesContext(connection) as ctx:
|
||||
resp = app.get('/api/agenda/')
|
||||
assert len(ctx.captured_queries) == 3
|
||||
with CaptureQueriesContext(connection) as ctx:
|
||||
resp = app.get('/api/agenda/', params={'q': 'MEET'})
|
||||
assert len(ctx.captured_queries) == 2
|
||||
|
||||
|
||||
def test_agendas_meetingtypes_api(app, some_data, meetings_agenda):
|
||||
resp = app.get('/api/agenda/%s/meetings/' % meetings_agenda.slug)
|
||||
|
|
Loading…
Reference in New Issue