Projet

Général

Profil

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

Emmanuel Cazenave, 25 février 2020 11:51

Télécharger (5,81 ko)

Voir les différences:

Subject: [PATCH 1/2] 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
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
-