Projet

Général

Profil

0001-backoffice-add-dedicated-fields-directory-for-cards-.patch

Frédéric Péters, 28 décembre 2022 16:38

Télécharger (6,2 ko)

Voir les différences:

Subject: [PATCH 1/2] backoffice: add dedicated fields directory for cards
 (#61416)

 tests/admin_pages/test_card.py | 29 +++++++++++++++++++++++++++++
 tests/admin_pages/test_form.py |  2 +-
 wcs/admin/fields.py            |  1 -
 wcs/admin/forms.py             | 13 ++++++++-----
 wcs/backoffice/cards.py        | 21 ++++++++++++++++++---
 5 files changed, 56 insertions(+), 10 deletions(-)
tests/admin_pages/test_card.py
448 448
    assert '<span class="label">User support</span> <span class="value">Optional</span>' in resp.text
449 449

  
450 450

  
451
def test_card_delete_field_existing_data(pub):
452
    create_superuser(pub)
453

  
454
    CardDef.wipe()
455
    carddef = CardDef()
456
    carddef.name = 'card title'
457
    carddef.fields = [
458
        fields.StringField(id='1', label='1st field', type='string'),
459
        fields.CommentField(id='2', label='comment field', type='comment'),
460
    ]
461
    carddef.store()
462
    carddef.data_class().wipe()
463

  
464
    carddata = carddef.data_class()()
465
    carddata.just_created()
466
    carddata.data = {'1': 'hello'}
467
    carddata.store()
468

  
469
    app = login(get_app(pub))
470
    resp = app.get('/backoffice/cards/%s/fields/1/delete' % carddef.id)
471
    assert 'You are about to remove the "1st field" field.' in resp.text
472
    assert 'Warning: this field data will be permanently deleted from existing cards.' in resp.text
473
    resp = resp.forms[0].submit()
474
    assert resp.location == 'http://example.net/backoffice/cards/1/fields/#itemId_2'
475
    resp = resp.follow()
476
    carddef.refresh_from_storage()
477
    assert len(carddef.fields) == 1
478

  
479

  
451 480
def test_card_custom_view_data_source(pub):
452 481
    user = create_superuser(pub)
453 482
    pub.role_class.wipe()
tests/admin_pages/test_form.py
1563 1563
    resp = resp.click(href='fields/')
1564 1564
    resp = resp.click(href='1/delete')
1565 1565
    assert 'You are about to remove the "1st field" field.' in resp.text
1566
    assert 'Warning:' in resp.text
1566
    assert 'Warning: this field data will be permanently deleted from existing forms.' in resp.text
1567 1567
    resp = resp.forms[0].submit()
1568 1568
    assert resp.location == 'http://example.net/backoffice/forms/1/fields/#itemId_2'
1569 1569
    resp = resp.follow()
wcs/admin/fields.py
303 303
    new_field_history_message = _('New field "%s"')
304 304
    field_count_message = _('This form contains %d fields.')
305 305
    field_over_count_message = _('This form contains more than %d fields.')
306

  
307 306
    support_import = True
308 307
    fields_count_total_soft_limit = 200
309 308
    fields_count_total_hard_limit = 400
wcs/admin/forms.py
193 193
        return formdef
194 194

  
195 195

  
196
class AdminFieldDefPage(FieldDefPage):
196
class FormFieldDefPage(FieldDefPage):
197 197
    section = 'forms'
198
    deletion_extra_warning_message = _(
199
        'Warning: this field data will be permanently deleted from existing forms.'
200
    )
198 201

  
199 202
    def get_deletion_extra_warning(self):
200 203
        if not self.objectdef.data_class().count():
201 204
            return None
202
        return _('Warning: this field data will be permanently deleted from existing forms.')
205
        return self.deletion_extra_warning_message
203 206

  
204 207

  
205
class AdminFieldsDirectory(FieldsDirectory):
206
    field_def_page_class = AdminFieldDefPage
208
class FormFieldsDirectory(FieldsDirectory):
209
    field_def_page_class = FormFieldDefPage
207 210
    field_var_prefix = 'form_var_'
208 211
    readonly_message = _('This form is readonly.')
209 212

  
......
627 630
    formdef_default_workflow = '_default'
628 631
    section = 'forms'
629 632
    options_directory_class = OptionsDirectory
630
    fields_directory_class = AdminFieldsDirectory
633
    fields_directory_class = FormFieldsDirectory
631 634

  
632 635
    delete_message = _('You are about to irrevocably delete this form.')
633 636
    delete_title = _('Deleting Form:')
wcs/backoffice/cards.py
19 19

  
20 20
from wcs.admin import utils
21 21
from wcs.admin.categories import CardDefCategoriesDirectory
22
from wcs.admin.forms import AdminFieldsDirectory, FormDefPage, FormDefUI, FormsDirectory, OptionsDirectory
22
from wcs.admin.forms import (
23
    FormDefPage,
24
    FormDefUI,
25
    FormFieldDefPage,
26
    FormFieldsDirectory,
27
    FormsDirectory,
28
    OptionsDirectory,
29
)
23 30
from wcs.carddef import CardDef, get_cards_graph
24 31
from wcs.categories import CardDefCategory
25 32
from wcs.workflows import Workflow
......
40 47
    section = 'cards'
41 48

  
42 49

  
43
class CardDefFieldsDirectory(AdminFieldsDirectory):
50
class CardFieldDefPage(FormFieldDefPage):
51
    section = 'cards'
52
    deletion_extra_warning_message = _(
53
        'Warning: this field data will be permanently deleted from existing cards.'
54
    )
55

  
56

  
57
class CardFieldsDirectory(FormFieldsDirectory):
58
    field_def_page_class = CardFieldDefPage
44 59
    field_count_message = _('This card model contains %d fields.')
45 60
    field_over_count_message = _('This card model contains more than %d fields.')
46 61
    readonly_message = _('This card model is readonly.')
......
54 69
    section = 'cards'
55 70

  
56 71
    options_directory_class = CardDefOptionsDirectory
57
    fields_directory_class = CardDefFieldsDirectory
72
    fields_directory_class = CardFieldsDirectory
58 73

  
59 74
    delete_message = _('You are about to irrevocably delete this card model.')
60 75
    delete_title = _('Deleting Card Model:')
61
-