agendas: add times in notify_checked for partial bookings (#82842)
gitea/chrono/pipeline/head This commit looks good
Details
gitea/chrono/pipeline/head This commit looks good
Details
This commit is contained in:
parent
cff4ce0861
commit
5b8419efe5
|
@ -2182,6 +2182,7 @@ class Event(models.Model):
|
|||
self.notify_checked()
|
||||
|
||||
def notify_checked(self):
|
||||
partial_bookings = self.agenda.partial_bookings
|
||||
for user_check in BookingCheck.objects.filter(booking__event=self).select_related('booking'):
|
||||
if user_check.presence is True and user_check.booking.presence_callback_url:
|
||||
url = user_check.booking.presence_callback_url
|
||||
|
@ -2194,6 +2195,19 @@ class Event(models.Model):
|
|||
'user_check_type_slug': user_check.type_slug,
|
||||
'user_check_type_label': user_check.type_label,
|
||||
}
|
||||
if partial_bookings:
|
||||
payload.update(
|
||||
{
|
||||
'start_time': user_check.start_time.isoformat() if user_check.start_time else None,
|
||||
'end_time': user_check.end_time.isoformat() if user_check.end_time else None,
|
||||
'computed_start_time': user_check.computed_start_time.isoformat()
|
||||
if user_check.computed_start_time
|
||||
else None,
|
||||
'computed_end_time': user_check.computed_end_time.isoformat()
|
||||
if user_check.computed_end_time
|
||||
else None,
|
||||
}
|
||||
)
|
||||
try:
|
||||
response = requests_wrapper.post(url, json=payload, remote_service='auto', timeout=15)
|
||||
if response and not response.ok:
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import datetime
|
||||
import json
|
||||
from unittest import mock
|
||||
|
||||
import pytest
|
||||
|
||||
from chrono.agendas.models import Agenda, Booking, Event, Subscription
|
||||
from chrono.agendas.models import Agenda, Booking, BookingCheck, Event, Subscription
|
||||
from chrono.utils.lingo import CheckType
|
||||
from chrono.utils.timezone import make_aware, now
|
||||
from tests.utils import login
|
||||
|
@ -716,8 +717,18 @@ def test_manager_partial_bookings_event_checked(app, admin_user):
|
|||
event=event,
|
||||
start_time=datetime.time(8, 00),
|
||||
end_time=datetime.time(10, 00),
|
||||
presence_callback_url='https://example.invalid/presence/%s' % i,
|
||||
absence_callback_url='https://example.invalid/absence/%s' % i,
|
||||
)
|
||||
if i < 3:
|
||||
if i == 0:
|
||||
booking.mark_user_presence(start_time=datetime.time(8, 00), end_time=datetime.time(9, 00))
|
||||
BookingCheck.objects.create(
|
||||
booking=booking,
|
||||
start_time=datetime.time(9, 00),
|
||||
end_time=datetime.time(10, 00),
|
||||
presence=False,
|
||||
)
|
||||
elif i < 3:
|
||||
booking.mark_user_presence(start_time=datetime.time(8, 00), end_time=datetime.time(10, 00))
|
||||
elif i < 7:
|
||||
booking.mark_user_absence(start_time=datetime.time(8, 00), end_time=datetime.time(10, 00))
|
||||
|
@ -732,10 +743,13 @@ def test_manager_partial_bookings_event_checked(app, admin_user):
|
|||
assert 'invoiced' not in resp
|
||||
|
||||
token = resp.context['csrf_token']
|
||||
resp = app.post(
|
||||
'/manage/agendas/%s/events/%s/checked' % (agenda.pk, event.pk),
|
||||
params={'csrfmiddlewaretoken': token},
|
||||
)
|
||||
with mock.patch('chrono.utils.requests_wrapper.RequestsSession.send') as mock_send:
|
||||
mock_response = mock.Mock(status_code=200)
|
||||
mock_send.return_value = mock_response
|
||||
resp = app.post(
|
||||
'/manage/agendas/%s/events/%s/checked' % (agenda.pk, event.pk),
|
||||
params={'csrfmiddlewaretoken': token},
|
||||
)
|
||||
event.refresh_from_db()
|
||||
assert event.checked is True
|
||||
resp = resp.follow()
|
||||
|
@ -748,6 +762,25 @@ def test_manager_partial_bookings_event_checked(app, admin_user):
|
|||
assert '<span class="checked tag">Checked</span>' in resp
|
||||
assert 'check-locked' not in resp
|
||||
assert 'invoiced' not in resp
|
||||
assert {x[0][0].url for x in mock_send.call_args_list} == {
|
||||
'https://example.invalid/presence/0',
|
||||
'https://example.invalid/presence/1',
|
||||
'https://example.invalid/presence/2',
|
||||
'https://example.invalid/absence/0',
|
||||
'https://example.invalid/absence/3',
|
||||
'https://example.invalid/absence/4',
|
||||
'https://example.invalid/absence/5',
|
||||
'https://example.invalid/absence/6',
|
||||
}
|
||||
assert set(json.loads(mock_send.call_args_list[0][0][0].body).keys()) == {
|
||||
'user_check_type_label',
|
||||
'user_check_type_slug',
|
||||
'user_was_present',
|
||||
'start_time',
|
||||
'end_time',
|
||||
'computed_start_time',
|
||||
'computed_end_time',
|
||||
}
|
||||
|
||||
# event not in past
|
||||
agenda.disable_check_update = False
|
||||
|
|
Loading…
Reference in New Issue