Projet

Général

Profil

0001-backoffice-delete-page-fields-41770.patch

Lauréline Guérin, 30 juin 2020 11:34

Télécharger (5,34 ko)

Voir les différences:

Subject: [PATCH] backoffice: delete page fields (#41770)

 tests/test_admin_pages.py | 50 +++++++++++++++++++++++++++++++++++++++
 wcs/admin/fields.py       | 27 +++++++++++++++++----
 2 files changed, 73 insertions(+), 4 deletions(-)
tests/test_admin_pages.py
1196 1196
    resp = resp.click(href='fields/')
1197 1197
    assert '1st field' in resp.text
1198 1198
    assert 'Use drag and drop' in resp.text
1199
    assert 'Also remove all fields from the page' not in resp.text
1199 1200

  
1200 1201
    resp = resp.click(href='1/delete')
1201 1202
    assert 'You are about to remove the "1st field" field.' in resp.text
......
1246 1247
    resp = resp.follow()
1247 1248
    assert len(FormDef.get(1).fields) == 0
1248 1249

  
1250

  
1251
def test_form_delete_page_field(pub):
1252
    create_superuser(pub)
1253
    create_role()
1254

  
1255
    FormDef.wipe()
1256
    formdef = FormDef()
1257
    formdef.name = 'form title'
1258
    formdef.fields = [
1259
        fields.PageField(id='1', label='page 1', type='page'),
1260
        fields.StringField(id='2', label='field 1 1', type='string'),
1261
        fields.StringField(id='3', label='field 1 2', type='string'),
1262
        fields.PageField(id='4', label='page 2', type='page'),
1263
        fields.PageField(id='5', label='page 3', type='page'),
1264
        fields.StringField(id='6', label='field 3 1', type='string'),
1265
        fields.StringField(id='7', label='field 3 2', type='string'),
1266
    ]
1267
    formdef.store()
1268
    formdef.data_class().wipe()
1269

  
1270
    app = login(get_app(pub))
1271

  
1272
    # delete fields from the page
1273
    resp = app.get('/backoffice/forms/1/fields/1/delete')
1274
    assert 'You are about to remove the "page 1" field.' in resp.text
1275
    assert 'Also remove all fields from the page' in resp.text
1276
    resp.forms[0]['delete_fields'] = True
1277
    resp = resp.forms[0].submit()
1278
    resp = resp.follow()
1279
    assert len(FormDef.get(1).fields) == 4
1280

  
1281
    # empty page
1282
    resp = app.get('/backoffice/forms/1/fields/4/delete')
1283
    assert 'You are about to remove the "page 2" field.' in resp.text
1284
    assert 'Also remove all fields from the page' not in resp.text
1285
    resp = resp.forms[0].submit()
1286
    resp = resp.follow()
1287
    assert len(FormDef.get(1).fields) == 3
1288

  
1289
    # keep fields
1290
    resp = app.get('/backoffice/forms/1/fields/5/delete')
1291
    assert 'You are about to remove the "page 3" field.' in resp.text
1292
    assert 'Also remove all fields from the page' in resp.text
1293
    resp.forms[0]['delete_fields'] = False
1294
    resp = resp.forms[0].submit()
1295
    resp = resp.follow()
1296
    assert len(FormDef.get(1).fields) == 2
1297

  
1298

  
1249 1299
def test_form_duplicate_field(pub):
1250 1300
    user = create_superuser(pub)
1251 1301
    create_role()
wcs/admin/fields.py
118 118
            warning = self.get_deletion_extra_warning()
119 119
            if warning:
120 120
                form.widgets.append(HtmlWidget('<div class="warningnotice">%s</div>' % warning))
121
        current_field_index = self.objectdef.fields.index(self.field)
122
        to_be_deleted = []
123
        if self.field.type == 'page':
124
            # get fields of the page and store indexes for deletion
125
            for index in range(current_field_index + 1, len(self.objectdef.fields)):
126
                field = self.objectdef.fields[index]
127
                if field.type == 'page':
128
                    # next page found; break
129
                    break
130
                to_be_deleted.append(index)
131
            to_be_deleted.reverse()
132
            # add delete_fields checkbox only if the page has fields
133
            if to_be_deleted:
134
                form.add(CheckboxWidget, 'delete_fields', title=_('Also remove all fields from the page'))
121 135
        form.add_submit('delete', _('Submit'))
122 136
        form.add_submit("cancel", _("Cancel"))
123 137
        if form.get_widget('cancel').parse():
......
130 144
            r += form.render()
131 145
            return r.getvalue()
132 146
        else:
133
            field_index = self.objectdef.fields.index(self.field)
134
            del self.objectdef.fields[field_index]
147
            # delete page fields if requested
148
            delete_fields = form.get_widget('delete_fields')
149
            if delete_fields and delete_fields.parse():
150
                for index in to_be_deleted:
151
                    del self.objectdef.fields[index]
152
            # delete current field
153
            del self.objectdef.fields[current_field_index]
135 154
            self.objectdef.store()
136 155
            # redirect to the field that was above this one
137 156
            if self.objectdef.fields:
138
                if field_index == 0:
157
                if current_field_index == 0:
139 158
                    above_field = self.objectdef.fields[0]
140 159
                else:
141
                    above_field = self.objectdef.fields[field_index-1]
160
                    above_field = self.objectdef.fields[current_field_index-1]
142 161
            else:
143 162
                above_field = None
144 163
            return self.redirect_field_anchor(above_field)
145
-