This commit is contained in:
parent
3615cc7ede
commit
032209f41a
|
@ -571,6 +571,7 @@ class Agendas(APIView):
|
|||
if agenda.kind == 'events':
|
||||
desk = Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
desk.import_timeperiod_exceptions_from_settings()
|
||||
agenda.take_snapshot(request=self.request, comment=pgettext('snapshot', 'created'))
|
||||
return Response({'err': 0, 'data': [get_agenda_detail(request, agenda)]})
|
||||
|
||||
|
||||
|
@ -595,6 +596,7 @@ class AgendaAPI(APIView):
|
|||
if has_bookings:
|
||||
raise APIError(_('This cannot be removed as there are bookings for a future date.'))
|
||||
|
||||
agenda.take_snapshot(request=self.request, deletion=True)
|
||||
agenda.delete()
|
||||
return Response({'err': 0})
|
||||
|
||||
|
@ -608,7 +610,8 @@ class AgendaAPI(APIView):
|
|||
if 'kind' in serializer.validated_data and serializer.validated_data['kind'] != agenda.kind:
|
||||
raise APIErrorBadRequest(N_('it is not possible to change kind value'))
|
||||
|
||||
serializer.save()
|
||||
agenda = serializer.save()
|
||||
agenda.take_snapshot(request=self.request)
|
||||
return self.get(request, agenda_identifier)
|
||||
|
||||
|
||||
|
@ -3201,6 +3204,7 @@ class EventsAPI(APIView):
|
|||
event = serializer.save()
|
||||
if event.recurrence_days:
|
||||
event.create_all_recurrences()
|
||||
agenda.take_snapshot(request=self.request, comment=_('added event %s') % event)
|
||||
return Response({'err': 0, 'data': get_event_detail(request, event)})
|
||||
|
||||
|
||||
|
@ -3259,6 +3263,7 @@ class EventAPI(APIView):
|
|||
changed_data, payload, protected_fields, protected_fields + ['recurrence_end_date']
|
||||
):
|
||||
event = serializer.save()
|
||||
event.agenda.take_snapshot(request=self.request, comment=_('changed event %s') % event)
|
||||
return Response({'err': 0, 'data': get_event_detail(request, event)})
|
||||
|
||||
def delete(self, request, agenda_identifier, event_identifier):
|
||||
|
@ -3274,6 +3279,7 @@ class EventAPI(APIView):
|
|||
raise APIError(_('This cannot be removed as there are bookings for a future date.'))
|
||||
|
||||
event.delete()
|
||||
event.agenda.take_snapshot(request=self.request, comment=_('removed event %s') % event)
|
||||
return Response({'err': 0})
|
||||
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ from chrono.agendas.models import (
|
|||
Resource,
|
||||
TimePeriodException,
|
||||
)
|
||||
from chrono.apps.snapshot.models import AgendaSnapshot
|
||||
from chrono.utils.timezone import localtime, now
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
@ -449,6 +450,7 @@ def test_agenda_api_delete(app, user):
|
|||
resp = app.delete('/api/agenda/%s/' % agenda.slug)
|
||||
assert resp.json['err'] == 0
|
||||
assert not Agenda.objects.exists()
|
||||
assert AgendaSnapshot.objects.count() == 1
|
||||
|
||||
|
||||
def test_agenda_api_delete_busy(app, user):
|
||||
|
@ -562,6 +564,7 @@ def test_add_agenda(app, user, settings):
|
|||
agenda = Agenda.objects.get(slug='my-agenda')
|
||||
assert agenda.kind == 'events'
|
||||
assert agenda.partial_bookings is False
|
||||
assert AgendaSnapshot.objects.count() == 1
|
||||
|
||||
settings.WORKING_DAY_CALENDAR = 'workalendar.europe.France'
|
||||
edit_group = Group.objects.create(name='Edit')
|
||||
|
@ -672,6 +675,7 @@ def test_add_agenda_partial_bookings(app, user, settings):
|
|||
def test_patch_agenda(app, user):
|
||||
Category.objects.create(label='Category A')
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
|
@ -680,6 +684,7 @@ def test_patch_agenda(app, user):
|
|||
assert resp.json['data']['text'] == 'Foo bar'
|
||||
assert resp.json['data']['kind'] == 'events'
|
||||
assert resp.json['data']['category'] is None
|
||||
assert AgendaSnapshot.objects.count() == 1
|
||||
|
||||
resp = app.patch_json('/api/agenda/%s/' % agenda.slug, params={'label': 'Test', 'kind': 'events'})
|
||||
assert resp.json['data']['id'] == 'foo-bar'
|
||||
|
|
|
@ -5,7 +5,8 @@ import pytest
|
|||
from django.db import connection
|
||||
from django.test.utils import CaptureQueriesContext
|
||||
|
||||
from chrono.agendas.models import Agenda, Booking, BookingCheck, Event, EventsType, Subscription
|
||||
from chrono.agendas.models import Agenda, Booking, BookingCheck, Desk, Event, EventsType, Subscription
|
||||
from chrono.apps.snapshot.models import AgendaSnapshot
|
||||
from chrono.utils.timezone import localtime, make_aware, now
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
@ -248,6 +249,7 @@ def test_string_or_list_serialiser(app, user, days_in, days_out, err_msg):
|
|||
agenda = Agenda(label='Foo bar')
|
||||
agenda.maximal_booking_delay = 0
|
||||
agenda.save()
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
api_url = '/api/agenda/%s/event/' % (agenda.slug)
|
||||
|
||||
params = {
|
||||
|
@ -292,6 +294,7 @@ def test_add_event(app, user):
|
|||
assert resp.json['detail'] == 'Not found.'
|
||||
|
||||
agenda = Agenda.objects.create(label='Foo bar', maximal_booking_delay=0)
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
api_url = '/api/agenda/%s/event/' % (agenda.slug)
|
||||
|
||||
# missing fields
|
||||
|
@ -330,6 +333,7 @@ def test_add_event(app, user):
|
|||
assert event.places == 10
|
||||
assert event.publication_datetime is None
|
||||
assert event.custom_fields == {}
|
||||
assert AgendaSnapshot.objects.count() == 1
|
||||
|
||||
# add an event without custom fields
|
||||
events_type = EventsType.objects.create(
|
||||
|
@ -505,6 +509,7 @@ def test_add_event(app, user):
|
|||
@pytest.mark.freeze_time('2023-03-09')
|
||||
def test_add_event_end_datetime(app, user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', maximal_booking_delay=0)
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
api_url = '/api/agenda/%s/event/' % (agenda.slug)
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
|
||||
|
@ -552,6 +557,7 @@ def test_update_event(app, user):
|
|||
],
|
||||
)
|
||||
agenda = Agenda.objects.create(label='Foo bar', events_type=events_type)
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
|
||||
# missing event
|
||||
api_url = '/api/agenda/%s/event/%s/' % (agenda.slug, 'nop')
|
||||
|
@ -601,6 +607,7 @@ def test_update_event(app, user):
|
|||
'textarea': '',
|
||||
'bool': None,
|
||||
}
|
||||
assert AgendaSnapshot.objects.count() == 1
|
||||
|
||||
# update event as a recurring event
|
||||
params = {
|
||||
|
@ -774,6 +781,7 @@ def test_update_event(app, user):
|
|||
|
||||
def test_event_read_only_fields(app, user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
agenda2 = Agenda.objects.create(label='Foo bar 2', kind='events')
|
||||
event = Event.objects.create(
|
||||
slug='event', start_datetime=now() + datetime.timedelta(days=5), places=1, agenda=agenda
|
||||
|
@ -812,6 +820,7 @@ def test_event_read_only_fields(app, user):
|
|||
@pytest.mark.freeze_time('2021-11-01 10:00')
|
||||
def test_delete_event(app, user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
event = Event.objects.create(
|
||||
slug='event', start_datetime=now() + datetime.timedelta(days=5), places=1, agenda=agenda
|
||||
)
|
||||
|
@ -824,11 +833,13 @@ def test_delete_event(app, user):
|
|||
resp = app.delete('/api/agenda/%s/event/%s/' % (agenda.slug, event.slug))
|
||||
assert resp.json['err'] == 0
|
||||
assert not Event.objects.exists()
|
||||
assert AgendaSnapshot.objects.count() == 1
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-11-01 10:00')
|
||||
def test_delete_event_forbidden(app, user, freezer):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
event = Event.objects.create(
|
||||
slug='event', start_datetime=now() + datetime.timedelta(days=5), places=1, agenda=agenda
|
||||
)
|
||||
|
@ -862,6 +873,7 @@ def test_delete_event_forbidden(app, user, freezer):
|
|||
@pytest.mark.freeze_time('2021-11-01 10:00')
|
||||
def test_delete_recurring_event_forbidden(app, user):
|
||||
agenda = Agenda.objects.create(label='Foo bar', kind='events')
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
start_datetime = now() + datetime.timedelta(days=10)
|
||||
event = Event.objects.create(
|
||||
start_datetime=start_datetime,
|
||||
|
|
Loading…
Reference in New Issue