0004-manager-list-subscriptions-on-event-check-page-61069.patch
chrono/agendas/models.py | ||
---|---|---|
2960 | 2960 |
extra_data = JSONField(null=True) |
2961 | 2961 |
date_start = models.DateField() |
2962 | 2962 |
date_end = models.DateField() |
2963 | ||
2964 |
@property |
|
2965 |
def user_name(self): |
|
2966 |
return ('%s %s' % (self.user_first_name, self.user_last_name)).strip() |
|
2967 | ||
2968 |
@property |
|
2969 |
def label(self): |
|
2970 |
return _('Subscription') |
|
2971 | ||
2972 |
def get_user_block(self): |
|
2973 |
template_vars = Context(settings.TEMPLATE_VARS) |
|
2974 |
template_vars.update( |
|
2975 |
{ |
|
2976 |
'booking': self, |
|
2977 |
} |
|
2978 |
) |
|
2979 |
try: |
|
2980 |
return Template(self.agenda.get_booking_user_block_template()).render(template_vars) |
|
2981 |
except (VariableDoesNotExist, TemplateSyntaxError): |
|
2982 |
return |
chrono/manager/forms.py | ||
---|---|---|
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 | 17 | |
18 |
import collections |
|
19 | 18 |
import csv |
20 | 19 |
import datetime |
21 | 20 | |
... | ... | |
43 | 42 |
Event, |
44 | 43 |
MeetingType, |
45 | 44 |
Resource, |
45 |
Subscription, |
|
46 | 46 |
TimePeriod, |
47 | 47 |
TimePeriodException, |
48 | 48 |
TimePeriodExceptionSource, |
... | ... | |
324 | 324 | |
325 | 325 |
def __init__(self, *args, **kwargs): |
326 | 326 |
self.agenda = kwargs.pop('agenda') |
327 |
filters = kwargs.pop('filters') |
|
327 | 328 |
super().__init__(*args, **kwargs) |
328 | 329 | |
329 |
# build filters from DB |
|
330 |
agenda_filters = self.agenda.get_booking_check_filters() |
|
331 |
filters = collections.defaultdict(set) |
|
332 |
for extra_data in self.queryset.filter(extra_data__has_any_keys=agenda_filters).values_list( |
|
333 |
'extra_data', flat=True |
|
334 |
): |
|
335 |
for k, v in extra_data.items(): |
|
336 |
if k in agenda_filters: |
|
337 |
filters[k].add(v) |
|
338 |
filters = sorted(filters.items()) |
|
339 |
filters = {k: sorted(list(v)) for k, v in filters} |
|
340 | ||
341 | 330 |
# add filters to filterset |
342 | 331 |
for key, values in filters.items(): |
343 | 332 |
self.filters[key] = django_filters.ChoiceFilter( |
... | ... | |
350 | 339 |
) |
351 | 340 | |
352 | 341 | |
342 |
class SubscriptionCheckFilterSet(BookingCheckFilterSet): |
|
343 |
class Meta: |
|
344 |
model = Subscription |
|
345 |
fields = [] |
|
346 | ||
347 | ||
353 | 348 |
class BookingAbsenceReasonForm(forms.Form): |
354 | 349 |
reason = forms.ChoiceField(required=False) |
355 | 350 |
chrono/manager/templates/chrono/manager_event_check.html | ||
---|---|---|
27 | 27 |
</form> |
28 | 28 |
<table class="main check-bookings"> |
29 | 29 |
<tbody> |
30 |
{% if booked and not event.checked %}
|
|
30 |
{% if results and not event.checked %}
|
|
31 | 31 |
<tr class="booking"> |
32 | 32 |
<td class="booking-actions"> |
33 | 33 |
<form method="post" action="{% url 'chrono-manager-event-checked' pk=agenda.pk event_pk=object.pk %}"> |
... | ... | |
63 | 63 |
</tr> |
64 | 64 |
{% endif %} |
65 | 65 |
{% endif %} |
66 |
{% for booking in booked %}
|
|
66 |
{% for result in results %}
|
|
67 | 67 |
<tr class="booking"> |
68 |
{% include "chrono/manager_event_check_booking_fragment.html" %} |
|
68 |
{% if result.kind == 'booking' %} |
|
69 |
{% with result as booking %}{% include "chrono/manager_event_check_booking_fragment.html" %}{% endwith %} |
|
70 |
{% elif result.kind == 'subscription' %} |
|
71 |
<td class="booking-username main-list">{{ result.get_user_block }}</td> |
|
72 |
<td class="booking-status">({% trans "Not booked" %})</td> |
|
73 |
{% if not event.checked or not agenda.disable_check_update %} |
|
74 |
<td class="booking-actions"></td> |
|
75 |
{% endif %} |
|
76 |
{% endif %} |
|
69 | 77 |
</tr> |
70 | 78 |
{% endfor %} |
71 | 79 |
</tbody> |
chrono/manager/views.py | ||
---|---|---|
14 | 14 |
# You should have received a copy of the GNU Affero General Public License |
15 | 15 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
16 | 16 | |
17 |
import collections |
|
17 | 18 |
import copy |
18 | 19 |
import csv |
19 | 20 |
import datetime |
... | ... | |
21 | 22 |
import json |
22 | 23 |
import math |
23 | 24 |
import uuid |
25 |
from operator import attrgetter |
|
24 | 26 | |
25 | 27 |
import requests |
26 | 28 |
from django.contrib import messages |
... | ... | |
102 | 104 |
NewEventForm, |
103 | 105 |
NewMeetingTypeForm, |
104 | 106 |
NewTimePeriodExceptionForm, |
107 |
SubscriptionCheckFilterSet, |
|
105 | 108 |
TimePeriodAddForm, |
106 | 109 |
TimePeriodExceptionForm, |
107 | 110 |
TimePeriodExceptionSourceReplaceForm, |
... | ... | |
2049 | 2052 |
queryset = super().get_queryset() |
2050 | 2053 |
return queryset.filter(agenda=self.agenda, start_datetime__date__lte=now().date(), cancelled=False) |
2051 | 2054 | |
2055 |
def get_filters(self, booked_queryset, subscription_queryset): |
|
2056 |
agenda_filters = self.agenda.get_booking_check_filters() |
|
2057 |
filters = collections.defaultdict(set) |
|
2058 |
extra_data_from_booked = booked_queryset.filter(extra_data__has_any_keys=agenda_filters).values_list( |
|
2059 |
'extra_data', flat=True |
|
2060 |
) |
|
2061 |
extra_data_from_subscriptions = subscription_queryset.filter( |
|
2062 |
extra_data__has_any_keys=agenda_filters |
|
2063 |
).values_list('extra_data', flat=True) |
|
2064 |
for extra_data in list(extra_data_from_booked) + list(extra_data_from_subscriptions): |
|
2065 |
for k, v in extra_data.items(): |
|
2066 |
if k in agenda_filters: |
|
2067 |
filters[k].add(v) |
|
2068 |
filters = sorted(filters.items()) |
|
2069 |
filters = {k: sorted(list(v)) for k, v in filters} |
|
2070 |
return filters |
|
2071 | ||
2052 | 2072 |
def get_context_data(self, **kwargs): |
2053 | 2073 |
context = super().get_context_data(**kwargs) |
2054 | 2074 | |
2055 | 2075 |
event = self.object |
2076 | ||
2077 |
# booking base queryset |
|
2056 | 2078 |
booked_qs = event.booking_set.filter( |
2057 | 2079 |
cancellation_datetime__isnull=True, in_waiting_list=False, primary_booking__isnull=True |
2058 | 2080 |
) |
... | ... | |
2060 | 2082 |
places_count=Value(1) |
2061 | 2083 |
+ Count('secondary_booking_set', filter=Q(cancellation_datetime__isnull=True)) |
2062 | 2084 |
) |
2063 |
filterset = BookingCheckFilterSet(self.request.GET, queryset=booked_qs, agenda=self.agenda) |
|
2064 |
context['filterset'] = filterset |
|
2065 | 2085 | |
2066 |
# build booking list |
|
2067 |
context['booked'] = filterset.qs.order_by('user_last_name', 'user_first_name') |
|
2068 |
context['booked_without_status'] = any(e.user_was_present is None for e in context['booked']) |
|
2069 |
if context['booked_without_status']: |
|
2070 |
context['absence_form'] = BookingAbsenceReasonForm(agenda=self.agenda) |
|
2071 |
for booking in context['booked']: |
|
2072 |
booking.form = BookingAbsenceReasonForm( |
|
2073 |
agenda=self.agenda, initial={'reason': booking.user_absence_reason} |
|
2074 |
) |
|
2086 |
# waiting list queryset |
|
2075 | 2087 |
waiting_qs = event.booking_set.filter( |
2076 | 2088 |
cancellation_datetime__isnull=True, in_waiting_list=True, primary_booking__isnull=True |
2077 | 2089 |
).order_by('user_last_name', 'user_first_name') |
... | ... | |
2079 | 2091 |
places_count=Value(1) |
2080 | 2092 |
+ Count('secondary_booking_set', filter=Q(cancellation_datetime__isnull=True)) |
2081 | 2093 |
) |
2094 | ||
2095 |
# subscription base queryset |
|
2096 |
subscription_qs = ( |
|
2097 |
self.agenda.subscriptions.filter( |
|
2098 |
date_start__lte=event.start_datetime, date_end__gte=event.start_datetime |
|
2099 |
) |
|
2100 |
# exclude user_external_id from booked_qs and waiting_qs |
|
2101 |
.exclude(user_external_id__in=booked_qs.values('user_external_id')).exclude( |
|
2102 |
user_external_id__in=waiting_qs.values('user_external_id') |
|
2103 |
) |
|
2104 |
) |
|
2105 |
print(subscription_qs) |
|
2106 | ||
2107 |
# build filters from booked_qs and subscription_qs |
|
2108 |
filters = self.get_filters(booked_queryset=booked_qs, subscription_queryset=subscription_qs) |
|
2109 |
# and filter booked and subscriptions |
|
2110 |
booked_filterset = BookingCheckFilterSet( |
|
2111 |
self.request.GET, queryset=booked_qs, agenda=self.agenda, filters=filters |
|
2112 |
) |
|
2113 |
subscription_filterset = SubscriptionCheckFilterSet( |
|
2114 |
self.request.GET, queryset=subscription_qs, agenda=self.agenda, filters=filters |
|
2115 |
) |
|
2116 | ||
2117 |
# build results from mixed booked and subscriptions |
|
2118 |
results = [] |
|
2119 |
booked_without_status = False |
|
2120 |
for booking in booked_filterset.qs: |
|
2121 |
if booking.user_was_present is None: |
|
2122 |
booked_without_status = True |
|
2123 |
booking.form = BookingAbsenceReasonForm( |
|
2124 |
agenda=self.agenda, initial={'reason': booking.user_absence_reason} |
|
2125 |
) |
|
2126 |
booking.kind = 'booking' |
|
2127 |
results.append(booking) |
|
2128 |
for subscription in subscription_filterset.qs: |
|
2129 |
subscription.kind = 'subscription' |
|
2130 |
results.append(subscription) |
|
2131 |
# sort results |
|
2132 |
results = sorted(results, key=attrgetter('user_last_name', 'user_first_name')) |
|
2133 | ||
2134 |
# set context |
|
2135 |
context['booked_without_status'] = booked_without_status |
|
2136 |
if context['booked_without_status']: |
|
2137 |
context['absence_form'] = BookingAbsenceReasonForm(agenda=self.agenda) |
|
2138 |
context['filterset'] = booked_filterset |
|
2139 |
context['results'] = results |
|
2082 | 2140 |
context['waiting'] = waiting_qs |
2083 | 2141 | |
2084 | 2142 |
return context |
tests/manager/test_event.py | ||
---|---|---|
10 | 10 |
from django.utils.timezone import localtime, make_aware, now |
11 | 11 |
from webtest import Upload |
12 | 12 | |
13 |
from chrono.agendas.models import AbsenceReason, AbsenceReasonGroup, Agenda, Booking, Desk, Event |
|
13 |
from chrono.agendas.models import ( |
|
14 |
AbsenceReason, |
|
15 |
AbsenceReasonGroup, |
|
16 |
Agenda, |
|
17 |
Booking, |
|
18 |
Desk, |
|
19 |
Event, |
|
20 |
Subscription, |
|
21 |
) |
|
14 | 22 |
from tests.utils import login |
15 | 23 | |
16 | 24 |
pytestmark = pytest.mark.django_db |
... | ... | |
1244 | 1252 |
waiting_list_places=5, |
1245 | 1253 |
agenda=agenda, |
1246 | 1254 |
) |
1247 |
booking1 = Booking.objects.create(event=event, user_first_name='User', user_last_name='42') |
|
1248 |
Booking.objects.create(event=event, user_first_name='User', user_last_name='01') |
|
1249 |
Booking.objects.create(event=event, user_first_name='User', user_last_name='17') |
|
1250 |
Booking.objects.create(event=event, user_first_name='User', user_last_name='35') |
|
1251 |
Booking.objects.create(event=event, user_first_name='User', user_last_name='05') |
|
1252 |
booking6 = Booking.objects.create(event=event, user_first_name='User', user_last_name='Cancelled') |
|
1255 |
booking1 = Booking.objects.create( |
|
1256 |
event=event, user_external_id='user:1', user_first_name='User', user_last_name='42' |
|
1257 |
) |
|
1258 |
Booking.objects.create( |
|
1259 |
event=event, user_external_id='user:2', user_first_name='User', user_last_name='01' |
|
1260 |
) |
|
1261 |
Booking.objects.create( |
|
1262 |
event=event, user_external_id='user:3', user_first_name='User', user_last_name='17' |
|
1263 |
) |
|
1264 |
Booking.objects.create( |
|
1265 |
event=event, user_external_id='user:4', user_first_name='User', user_last_name='35' |
|
1266 |
) |
|
1267 |
Booking.objects.create( |
|
1268 |
event=event, user_external_id='user:5', user_first_name='User', user_last_name='05' |
|
1269 |
) |
|
1270 |
booking6 = Booking.objects.create( |
|
1271 |
event=event, user_external_id='user:6', user_first_name='User', user_last_name='Cancelled' |
|
1272 |
) |
|
1253 | 1273 |
booking6.cancel() |
1254 | 1274 |
booking7 = Booking.objects.create( |
1255 |
event=event, user_first_name='User', user_last_name='Waiting', in_waiting_list=True |
|
1275 |
event=event, |
|
1276 |
user_external_id='user:7', |
|
1277 |
user_first_name='User', |
|
1278 |
user_last_name='Waiting', |
|
1279 |
in_waiting_list=True, |
|
1256 | 1280 |
) |
1257 | 1281 |
booking8 = Booking.objects.create( |
1258 |
event=event, user_first_name='User', user_last_name='Secondary', primary_booking=booking1 |
|
1282 |
event=event, |
|
1283 |
user_external_id='user:1', |
|
1284 |
user_first_name='User', |
|
1285 |
user_last_name='Secondary', |
|
1286 |
primary_booking=booking1, |
|
1287 |
) |
|
1288 |
Subscription.objects.create( |
|
1289 |
agenda=agenda, |
|
1290 |
user_external_id='user:1', |
|
1291 |
user_first_name='Subscription', |
|
1292 |
user_last_name='42', |
|
1293 |
date_start=now(), |
|
1294 |
date_end=now(), |
|
1295 |
) |
|
1296 |
Subscription.objects.create( |
|
1297 |
agenda=agenda, |
|
1298 |
user_external_id='user:8', |
|
1299 |
user_first_name='Subscription', |
|
1300 |
user_last_name='43', |
|
1301 |
date_start=now(), |
|
1302 |
date_end=now(), |
|
1303 |
) |
|
1304 |
Subscription.objects.create( |
|
1305 |
agenda=agenda, |
|
1306 |
user_external_id='user:9', |
|
1307 |
user_first_name='Subscription', |
|
1308 |
user_last_name='14', |
|
1309 |
date_start=now(), |
|
1310 |
date_end=now(), |
|
1311 |
) |
|
1312 |
Subscription.objects.create( |
|
1313 |
agenda=agenda, |
|
1314 |
user_external_id='user:7', |
|
1315 |
user_first_name='Subscription', |
|
1316 |
user_last_name='Waiting', |
|
1317 |
date_start=now(), |
|
1318 |
date_end=now(), |
|
1319 |
) |
|
1320 |
Subscription.objects.create( |
|
1321 |
agenda=agenda, |
|
1322 |
user_external_id='user:42', |
|
1323 |
user_first_name='Subscription', |
|
1324 |
user_last_name='Too soon', |
|
1325 |
date_start=now() - datetime.timedelta(days=1), |
|
1326 |
date_end=now() - datetime.timedelta(days=1), |
|
1327 |
) |
|
1328 |
Subscription.objects.create( |
|
1329 |
agenda=agenda, |
|
1330 |
user_external_id='user:42', |
|
1331 |
user_first_name='Subscription', |
|
1332 |
user_last_name='Too late', |
|
1333 |
date_start=now() + datetime.timedelta(days=1), |
|
1334 |
date_end=now() + datetime.timedelta(days=1), |
|
1259 | 1335 |
) |
1336 | ||
1260 | 1337 |
login(app) |
1261 | 1338 | |
1262 | 1339 |
# event not in past |
... | ... | |
1275 | 1352 |
app.get('/manage/agendas/%s/events/%s/check' % (agenda2.pk, event.pk), status=404) |
1276 | 1353 | |
1277 | 1354 |
resp = resp.click('Check') |
1278 |
assert 'Bookings (6/10)' in resp |
|
1279 |
assert 'Waiting List (1/5)' in resp |
|
1280 | 1355 |
assert ( |
1281 | 1356 |
resp.text.index('Bookings (6/10)') |
1282 | 1357 |
< resp.text.index('User 01') |
1283 | 1358 |
< resp.text.index('User 05') |
1359 |
< resp.text.index('Subscription 14') |
|
1284 | 1360 |
< resp.text.index('User 17') |
1285 | 1361 |
< resp.text.index('User 35') |
1286 | 1362 |
< resp.text.index('User 42') |
1363 |
< resp.text.index('Subscription 43') |
|
1287 | 1364 |
< resp.text.index('Waiting List (1/5)') |
1288 | 1365 |
< resp.text.index('User Waiting') |
1289 |
) # user ordering is not optimal ...
|
|
1366 |
) |
|
1290 | 1367 |
assert 'User Cancelled' not in resp |
1368 |
assert 'Subscription Waiting' not in resp |
|
1369 |
assert 'Subscription 42' not in resp |
|
1370 |
assert 'Subscription too soon' not in resp |
|
1371 |
assert 'Subscription too late' not in resp |
|
1291 | 1372 | |
1292 | 1373 |
agenda.booking_user_block_template = '{{ booking.user_name }} Foo Bar' |
1293 | 1374 |
agenda.save() |
1294 | 1375 |
resp = app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk)) |
1295 | 1376 |
assert 'User 01 Foo Bar' in resp |
1377 |
assert 'Subscription 14 Foo Bar' in resp |
|
1296 | 1378 |
assert 'User Waiting Foo Bar' in resp |
1297 | 1379 | |
1298 | 1380 |
# cancelled booking |
... | ... | |
1412 | 1494 |
places=10, |
1413 | 1495 |
agenda=agenda, |
1414 | 1496 |
) |
1415 |
Booking.objects.create(event=event, user_first_name='User', user_last_name='none') |
|
1416 |
Booking.objects.create(event=event, user_first_name='User', user_last_name='empty', extra_data={}) |
|
1417 | 1497 |
Booking.objects.create( |
1418 |
event=event, user_first_name='User', user_last_name='foo-val1 bar-none', extra_data={'foo': 'val1'} |
|
1498 |
event=event, user_external_id='user:none', user_first_name='User', user_last_name='none' |
|
1499 |
) |
|
1500 |
Booking.objects.create( |
|
1501 |
event=event, |
|
1502 |
user_external_id='user:empty', |
|
1503 |
user_first_name='User', |
|
1504 |
user_last_name='empty', |
|
1505 |
extra_data={}, |
|
1506 |
) |
|
1507 |
Booking.objects.create( |
|
1508 |
event=event, |
|
1509 |
user_external_id='user:1', |
|
1510 |
user_first_name='User', |
|
1511 |
user_last_name='foo-val1 bar-none', |
|
1512 |
extra_data={'foo': 'val1'}, |
|
1419 | 1513 |
) |
1420 | 1514 |
Booking.objects.create( |
1421 | 1515 |
event=event, |
1516 |
user_external_id='user:2', |
|
1422 | 1517 |
user_first_name='User', |
1423 | 1518 |
user_last_name='foo-val2 bar-val1', |
1424 | 1519 |
extra_data={'foo': 'val2', 'bar': 'val1'}, |
1425 | 1520 |
) |
1426 | 1521 |
Booking.objects.create( |
1427 | 1522 |
event=event, |
1523 |
user_external_id='user:3', |
|
1428 | 1524 |
user_first_name='User', |
1429 | 1525 |
user_last_name='foo-val1 bar-val2', |
1430 | 1526 |
extra_data={'foo': 'val1', 'bar': 'val2'}, |
1431 | 1527 |
) |
1432 | 1528 |
Booking.objects.create( |
1433 |
event=event, user_first_name='User', user_last_name='foo-none bar-val2', extra_data={'bar': 'val2'} |
|
1529 |
event=event, |
|
1530 |
user_external_id='user:4', |
|
1531 |
user_first_name='User', |
|
1532 |
user_last_name='foo-none bar-val2', |
|
1533 |
extra_data={'bar': 'val2'}, |
|
1534 |
) |
|
1535 | ||
1536 |
Subscription.objects.create( |
|
1537 |
agenda=agenda, |
|
1538 |
user_external_id='subscription:none', |
|
1539 |
user_first_name='Subscription', |
|
1540 |
user_last_name='none', |
|
1541 |
date_start=event.start_datetime, |
|
1542 |
date_end=event.start_datetime, |
|
1543 |
) |
|
1544 |
Subscription.objects.create( |
|
1545 |
agenda=agenda, |
|
1546 |
user_external_id='subscription:empty', |
|
1547 |
user_first_name='Subscription', |
|
1548 |
user_last_name='empty', |
|
1549 |
extra_data={}, |
|
1550 |
date_start=event.start_datetime, |
|
1551 |
date_end=event.start_datetime, |
|
1552 |
) |
|
1553 |
Subscription.objects.create( |
|
1554 |
agenda=agenda, |
|
1555 |
user_external_id='subscription:1', |
|
1556 |
user_first_name='Subscription', |
|
1557 |
user_last_name='foo-val1 bar-none', |
|
1558 |
extra_data={'foo': 'val1'}, |
|
1559 |
date_start=event.start_datetime, |
|
1560 |
date_end=event.start_datetime, |
|
1561 |
) |
|
1562 |
Subscription.objects.create( |
|
1563 |
agenda=agenda, |
|
1564 |
user_external_id='subscription:2', |
|
1565 |
user_first_name='Subscription', |
|
1566 |
user_last_name='foo-val2 bar-val1', |
|
1567 |
extra_data={'foo': 'val2', 'bar': 'val1'}, |
|
1568 |
date_start=event.start_datetime, |
|
1569 |
date_end=event.start_datetime, |
|
1570 |
) |
|
1571 |
Subscription.objects.create( |
|
1572 |
agenda=agenda, |
|
1573 |
user_external_id='subscription:3', |
|
1574 |
user_first_name='Subscription', |
|
1575 |
user_last_name='foo-val1 bar-val2', |
|
1576 |
extra_data={'foo': 'val1', 'bar': 'val2'}, |
|
1577 |
date_start=event.start_datetime, |
|
1578 |
date_end=event.start_datetime, |
|
1579 |
) |
|
1580 |
Subscription.objects.create( |
|
1581 |
agenda=agenda, |
|
1582 |
user_external_id='subscription:4', |
|
1583 |
user_first_name='Subscription', |
|
1584 |
user_last_name='foo-none bar-val2', |
|
1585 |
extra_data={'bar': 'val2'}, |
|
1586 |
date_start=event.start_datetime, |
|
1587 |
date_end=event.start_datetime, |
|
1434 | 1588 |
) |
1435 | 1589 |
login(app) |
1436 | 1590 | |
1437 | 1591 |
resp = app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk)) |
1438 | 1592 |
assert 'User none' in resp |
1439 | 1593 |
assert 'User empty' in resp |
1440 |
assert 'User foo-val1' in resp |
|
1594 |
assert 'User foo-val1 bar-none' in resp
|
|
1441 | 1595 |
assert 'User foo-val2 bar-val1' in resp |
1442 | 1596 |
assert 'User foo-val1 bar-val2' in resp |
1443 | 1597 |
assert 'User foo-none bar-val2' in resp |
1598 |
assert 'Subscription none' in resp |
|
1599 |
assert 'Subscription empty' in resp |
|
1600 |
assert 'Subscription foo-val1 bar-none' in resp |
|
1601 |
assert 'Subscription foo-val2 bar-val1' in resp |
|
1602 |
assert 'Subscription foo-val1 bar-val2' in resp |
|
1603 |
assert 'Subscription foo-none bar-val2' in resp |
|
1444 | 1604 | |
1445 | 1605 |
resp = app.get( |
1446 | 1606 |
'/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), params={'unknown': 'unknown'} |
... | ... | |
1451 | 1611 |
assert 'User foo-val2 bar-val1' in resp |
1452 | 1612 |
assert 'User foo-val1 bar-val2' in resp |
1453 | 1613 |
assert 'User foo-none bar-val2' in resp |
1614 |
assert 'Subscription none' in resp |
|
1615 |
assert 'Subscription empty' in resp |
|
1616 |
assert 'Subscription foo-val1 bar-none' in resp |
|
1617 |
assert 'Subscription foo-val2 bar-val1' in resp |
|
1618 |
assert 'Subscription foo-val1 bar-val2' in resp |
|
1619 |
assert 'Subscription foo-none bar-val2' in resp |
|
1454 | 1620 | |
1455 | 1621 |
resp = app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), params={'foo': 'unknown'}) |
1456 | 1622 |
assert 'User none' in resp |
... | ... | |
1459 | 1625 |
assert 'User foo-val2 bar-val1' in resp |
1460 | 1626 |
assert 'User foo-val1 bar-val2' in resp |
1461 | 1627 |
assert 'User foo-none bar-val2' in resp |
1628 |
assert 'Subscription none' in resp |
|
1629 |
assert 'Subscription empty' in resp |
|
1630 |
assert 'Subscription foo-val1 bar-none' in resp |
|
1631 |
assert 'Subscription foo-val2 bar-val1' in resp |
|
1632 |
assert 'Subscription foo-val1 bar-val2' in resp |
|
1633 |
assert 'Subscription foo-none bar-val2' in resp |
|
1462 | 1634 | |
1463 | 1635 |
resp = app.get('/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), params={'foo': 'val1'}) |
1464 | 1636 |
assert 'User none' not in resp |
... | ... | |
1467 | 1639 |
assert 'User foo-val2 bar-val1' not in resp |
1468 | 1640 |
assert 'User foo-val1 bar-val2' in resp |
1469 | 1641 |
assert 'User foo-none bar-val2' not in resp |
1642 |
assert 'Subscription none' not in resp |
|
1643 |
assert 'Subscription empty' not in resp |
|
1644 |
assert 'Subscription foo-val1 bar-none' in resp |
|
1645 |
assert 'Subscription foo-val2 bar-val1' not in resp |
|
1646 |
assert 'Subscription foo-val1 bar-val2' in resp |
|
1647 |
assert 'Subscription foo-none bar-val2' not in resp |
|
1470 | 1648 | |
1471 | 1649 |
resp = app.get( |
1472 | 1650 |
'/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), params={'foo': 'val1', 'bar': 'val2'} |
... | ... | |
1477 | 1655 |
assert 'User foo-val2 bar-val1' not in resp |
1478 | 1656 |
assert 'User foo-val1 bar-val2' in resp |
1479 | 1657 |
assert 'User foo-none bar-val2' not in resp |
1658 |
assert 'Subscription none' not in resp |
|
1659 |
assert 'Subscription empty' not in resp |
|
1660 |
assert 'Subscription foo-val1 bar-none' not in resp |
|
1661 |
assert 'Subscription foo-val2 bar-val1' not in resp |
|
1662 |
assert 'Subscription foo-val1 bar-val2' in resp |
|
1663 |
assert 'Subscription foo-none bar-val2' not in resp |
|
1480 | 1664 | |
1481 | 1665 |
resp = app.get( |
1482 | 1666 |
'/manage/agendas/%s/events/%s/check' % (agenda.pk, event.pk), params={'foo': 'val2', 'bar': 'val2'} |
... | ... | |
1487 | 1671 |
assert 'User foo-val2 bar-val1' not in resp |
1488 | 1672 |
assert 'User foo-val1 bar-val2' not in resp |
1489 | 1673 |
assert 'User foo-none bar-val2' not in resp |
1674 |
assert 'Subscription none' not in resp |
|
1675 |
assert 'Subscription empty' not in resp |
|
1676 |
assert 'Subscription foo-val1 bar-none' not in resp |
|
1677 |
assert 'Subscription foo-val2 bar-val1' not in resp |
|
1678 |
assert 'Subscription foo-val1 bar-val2' not in resp |
|
1679 |
assert 'Subscription foo-none bar-val2' not in resp |
|
1490 | 1680 | |
1491 | 1681 | |
1492 | 1682 |
def test_event_check_booking(app, admin_user): |
1493 |
- |