Projet

Général

Profil

0004-manager-allow-empty-booking-delays-on-virtual-agenda.patch

Emmanuel Cazenave, 16 mars 2020 17:54

Télécharger (5,81 ko)

Voir les différences:

Subject: [PATCH 4/8] manager: allow empty booking delays on virtual agendas
 (#40121)

 .../agendas/migrations/0039_booking_delays.py | 29 +++++++++++++++++++
 chrono/agendas/models.py                      | 11 +++++--
 chrono/manager/forms.py                       |  6 ++++
 tests/test_manager.py                         | 28 ++++++++++++++++++
 4 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 chrono/agendas/migrations/0039_booking_delays.py
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
188 188
    resp = resp.follow()
189 189
    assert 'Foo bar' in resp.text
190 190
    assert '<h2>Settings' in resp.text
191
    assert agenda.minimal_booking_delay == 1
192
    assert agenda.maximal_booking_delay == 56
191 193

  
192 194

  
193 195
def test_add_agenda_as_manager(app, manager_user):
......
218 220
    assert '<h2>Settings' in resp.text
219 221

  
220 222

  
223
def test_options_agenda_cant_unset_delays(app, admin_user):
224
    agenda = Agenda.objects.create(label=u'Foo bar')
225
    assert agenda.minimal_booking_delay == 1
226
    app = login(app)
227
    url = '/manage/agendas/%s/edit' % agenda.pk
228
    resp = app.get(url)
229
    resp.form['minimal_booking_delay'] = None
230
    resp = resp.form.submit()
231
    agenda = Agenda.objects.get(label=u'Foo bar')
232
    assert agenda.minimal_booking_delay == 1
233

  
234

  
235
def test_options_virtuale_agenda_can_unset_delays(app, admin_user):
236
    agenda = Agenda.objects.create(label=u'Foo bar', kind='virtual', maximal_booking_delay=2)
237
    assert agenda.maximal_booking_delay == 2
238
    app = login(app)
239
    url = '/manage/agendas/%s/edit' % agenda.pk
240
    resp = app.get(url)
241
    resp.form['maximal_booking_delay'] = None
242
    resp = resp.form.submit()
243
    agenda = Agenda.objects.get(label=u'Foo bar')
244
    assert agenda.maximal_booking_delay is None
245

  
246

  
221 247
def test_options_agenda_as_manager(app, manager_user):
222 248
    agenda = Agenda(label=u'Foo bar')
223 249
    agenda.view_role = manager_user.groups.all()[0]
......
2183 2209
    resp = resp.form.submit()
2184 2210
    agenda = Agenda.objects.get(label='Virtual agenda')
2185 2211
    assert resp.location.endswith('/manage/agendas/%s/settings' % agenda.id)
2212
    assert agenda.minimal_booking_delay is None
2213
    assert agenda.maximal_booking_delay is None
2186 2214

  
2187 2215

  
2188 2216
def test_virtual_agenda_baseview_empty(app, admin_user):
2189
-