0001-manager-allow-empty-booking-delays-on-virtual-agenda.patch
chrono/agendas/migrations/0039_booking_delays.py | ||
---|---|---|
1 |
# -*- coding: utf-8 -*- |
|
2 |
# Generated by Django 1.11.18 on 2020-02-25 07:33 |
|
3 |
from __future__ import unicode_literals |
|
4 | ||
5 |
from django.db import migrations, models |
|
6 | ||
7 | ||
8 |
class Migration(migrations.Migration): |
|
9 | ||
10 |
dependencies = [ |
|
11 |
('agendas', '0038_start_virtual_agendas'), |
|
12 |
] |
|
13 | ||
14 |
operations = [ |
|
15 |
migrations.AlterField( |
|
16 |
model_name='agenda', |
|
17 |
name='maximal_booking_delay', |
|
18 |
field=models.PositiveIntegerField( |
|
19 |
blank=True, default=None, null=True, verbose_name='Maximal booking delay (in days)' |
|
20 |
), |
|
21 |
), |
|
22 |
migrations.AlterField( |
|
23 |
model_name='agenda', |
|
24 |
name='minimal_booking_delay', |
|
25 |
field=models.PositiveIntegerField( |
|
26 |
blank=True, default=None, null=True, verbose_name='Minimal booking delay (in days)' |
|
27 |
), |
|
28 |
), |
|
29 |
] |
chrono/agendas/models.py | ||
---|---|---|
74 | 74 |
label = models.CharField(_('Label'), max_length=150) |
75 | 75 |
slug = models.SlugField(_('Identifier'), max_length=160, unique=True) |
76 | 76 |
kind = models.CharField(_('Kind'), max_length=20, choices=AGENDA_KINDS, default='events') |
77 |
minimal_booking_delay = models.PositiveIntegerField(_('Minimal booking delay (in days)'), default=1) |
|
77 |
minimal_booking_delay = models.PositiveIntegerField( |
|
78 |
_('Minimal booking delay (in days)'), default=None, null=True, blank=True |
|
79 |
) |
|
78 | 80 |
maximal_booking_delay = models.PositiveIntegerField( |
79 |
_('Maximal booking delay (in days)'), default=56
|
|
81 |
_('Maximal booking delay (in days)'), default=None, null=True, blank=True
|
|
80 | 82 |
) # eight weeks |
81 | 83 |
real_agendas = models.ManyToManyField( |
82 | 84 |
'self', |
... | ... | |
113 | 115 |
def save(self, *args, **kwargs): |
114 | 116 |
if not self.slug: |
115 | 117 |
self.slug = generate_slug(self) |
118 |
if self.kind != 'virtual': |
|
119 |
if self.minimal_booking_delay is None: |
|
120 |
self.minimal_booking_delay = 1 |
|
121 |
if self.maximal_booking_delay is None: |
|
122 |
self.maximal_booking_delay = 56 |
|
116 | 123 |
super(Agenda, self).save(*args, **kwargs) |
117 | 124 | |
118 | 125 |
def get_absolute_url(self): |
chrono/manager/forms.py | ||
---|---|---|
60 | 60 |
model = Agenda |
61 | 61 |
fields = ['label', 'slug', 'edit_role', 'view_role', 'minimal_booking_delay', 'maximal_booking_delay'] |
62 | 62 | |
63 |
def __init__(self, *args, **kwargs): |
|
64 |
super(AgendaEditForm, self).__init__(*args, **kwargs) |
|
65 |
if kwargs['instance'].kind != 'virtual': |
|
66 |
self.fields['minimal_booking_delay'].required = True |
|
67 |
self.fields['maximal_booking_delay'].required = True |
|
68 | ||
63 | 69 | |
64 | 70 |
class NewEventForm(forms.ModelForm): |
65 | 71 |
class Meta: |
tests/test_manager.py | ||
---|---|---|
187 | 187 |
resp = resp.follow() |
188 | 188 |
assert 'Foo bar' in resp.text |
189 | 189 |
assert '<h2>Settings' in resp.text |
190 |
assert agenda.minimal_booking_delay == 1 |
|
191 |
assert agenda.maximal_booking_delay == 56 |
|
190 | 192 | |
191 | 193 | |
192 | 194 |
def test_add_agenda_as_manager(app, manager_user): |
... | ... | |
217 | 219 |
assert '<h2>Settings' in resp.text |
218 | 220 | |
219 | 221 | |
222 |
def test_options_agenda_cant_unset_delays(app, admin_user): |
|
223 |
agenda = Agenda.objects.create(label=u'Foo bar') |
|
224 |
assert agenda.minimal_booking_delay == 1 |
|
225 |
app = login(app) |
|
226 |
url = '/manage/agendas/%s/edit' % agenda.pk |
|
227 |
resp = app.get(url) |
|
228 |
resp.form['minimal_booking_delay'] = None |
|
229 |
resp = resp.form.submit() |
|
230 |
agenda = Agenda.objects.get(label=u'Foo bar') |
|
231 |
assert agenda.minimal_booking_delay == 1 |
|
232 | ||
233 | ||
234 |
def test_options_virtuale_agenda_can_unset_delays(app, admin_user): |
|
235 |
agenda = Agenda.objects.create(label=u'Foo bar', kind='virtual', maximal_booking_delay=2) |
|
236 |
assert agenda.maximal_booking_delay == 2 |
|
237 |
app = login(app) |
|
238 |
url = '/manage/agendas/%s/edit' % agenda.pk |
|
239 |
resp = app.get(url) |
|
240 |
resp.form['maximal_booking_delay'] = None |
|
241 |
resp = resp.form.submit() |
|
242 |
agenda = Agenda.objects.get(label=u'Foo bar') |
|
243 |
assert agenda.maximal_booking_delay is None |
|
244 | ||
245 | ||
220 | 246 |
def test_options_agenda_as_manager(app, manager_user): |
221 | 247 |
agenda = Agenda(label=u'Foo bar') |
222 | 248 |
agenda.view_role = manager_user.groups.all()[0] |
... | ... | |
2126 | 2152 |
resp = resp.form.submit() |
2127 | 2153 |
agenda = Agenda.objects.get(label='Virtual agenda') |
2128 | 2154 |
assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id) |
2155 |
assert agenda.minimal_booking_delay is None |
|
2156 |
assert agenda.maximal_booking_delay is None |
|
2129 | 2157 | |
2130 | 2158 | |
2131 | 2159 |
def test_virtual_agenda_baseview_empty(app, admin_user): |
2132 |
- |