api: add backoffice url to event details (#60021)

This commit is contained in:
Valentin Deniaud 2021-12-23 14:13:13 +01:00
parent 278be72b03
commit 5ebb692c19
4 changed files with 61 additions and 1 deletions

View File

@ -500,6 +500,17 @@ def get_event_detail(
}
)
else:
if not event.pk and ':' in event.slug:
backoffice_url = request.build_absolute_uri(
reverse(
'chrono-manager-event-create-recurrence',
kwargs={'pk': agenda.pk, 'event_identifier': event.slug},
)
)
else:
backoffice_url = request.build_absolute_uri(
reverse('chrono-manager-event-view', kwargs={'pk': agenda.pk, 'event_pk': event.pk})
)
details.update(
{
'disabled': is_event_disabled(
@ -534,6 +545,7 @@ def get_event_detail(
kwargs={'agenda_identifier': agenda.slug, 'event_identifier': event.slug},
)
),
'backoffice_url': backoffice_url,
},
'places': get_event_places(event),
}

View File

@ -6,10 +6,11 @@ from django.utils.timezone import localtime, make_aware, now
from chrono.agendas.models import Agenda, Desk, Event, MeetingType, TimePeriod, VirtualMember
User = get_user_model()
@pytest.fixture
def user():
User = get_user_model()
user = User.objects.create(
username='john.doe', first_name='John', last_name='Doe', email='john.doe@example.net'
)
@ -18,6 +19,15 @@ def user():
return user
@pytest.fixture
def admin_user():
try:
user = User.objects.get(username='admin')
except User.DoesNotExist:
user = User.objects.create_superuser('admin', email=None, password='admin')
return user
@pytest.fixture(params=['Europe/Brussels', 'Asia/Kolkata', 'Brazil/East'])
def time_zone(request, settings):
settings.TIME_ZONE = request.param

View File

@ -8,6 +8,7 @@ from django.test.utils import CaptureQueriesContext
from django.utils.timezone import localtime, make_aware, make_naive, now
from chrono.agendas.models import Agenda, Booking, Category, Desk, Event, Subscription, TimePeriodException
from tests.utils import login
pytestmark = pytest.mark.django_db
@ -163,6 +164,42 @@ def test_datetime_api_urls(app):
)
def test_datetime_api_backoffice_url(app, admin_user):
agenda = Agenda.objects.create(label='Foo bar', kind='events', minimal_booking_delay=0)
event = Event.objects.create(
label='Example Event', start_datetime=now() + datetime.timedelta(days=5), places=5, agenda=agenda
)
app = login(app)
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
url = resp.json['data'][0]['api']['backoffice_url']
assert urlparse.urlparse(url).path == '/manage/agendas/%s/events/%s/' % (agenda.pk, event.pk)
assert event.label in app.get(url).text
event.delete()
# recurring event
Event.objects.create(
label='Example Event',
start_datetime=now() + datetime.timedelta(days=5),
recurrence_days=list(range(7)),
places=5,
agenda=agenda,
)
assert Event.objects.count() == 1
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug)
url = resp.json['data'][0]['api']['backoffice_url']
assert urlparse.urlparse(url).path.startswith(
'/manage/agendas/%s/create_event_recurrence/%s:'
% (
agenda.pk,
event.slug,
)
)
assert event.label in app.get(url).follow().text
assert Event.objects.count() == 2
def test_datetime_api_min_places(app):
agenda = Agenda.objects.create(label='Foo bar', kind='events')
event = Event.objects.create(start_datetime=now() + datetime.timedelta(days=7), places=5, agenda=agenda)

View File

@ -52,6 +52,7 @@ def test_status(app, user):
'fillslot_url': 'http://testserver/api/agenda/foo-bar/fillslot/event-slug/',
'status_url': 'http://testserver/api/agenda/foo-bar/status/event-slug/',
'check_url': 'http://testserver/api/agenda/foo-bar/check/event-slug/',
'backoffice_url': 'http://testserver/manage/agendas/%s/events/%s/' % (agenda.pk, event.pk),
},
'places': {'available': 9, 'reserved': 1, 'total': 10, 'full': False, 'has_waiting_list': False},
}