Projet

Général

Profil

0002-formdefs-add-missing-tests-for-form-import-57753.patch

Lauréline Guérin, 04 novembre 2021 14:51

Télécharger (11,1 ko)

Voir les différences:

Subject: [PATCH 2/4] formdefs: add missing tests for form import (#57753)

 tests/test_formdef_import.py | 120 ++++++++++++++++++++---------------
 1 file changed, 69 insertions(+), 51 deletions(-)
tests/test_formdef_import.py
1 1
import io
2
import shutil
3 2
import time
4 3
import xml.etree.ElementTree as ET
5 4

  
6 5
import pytest
7
from quixote import cleanup
8 6

  
7
from wcs.blocks import BlockDef
9 8
from wcs.carddef import CardDef
10 9
from wcs.categories import Category
11 10
from wcs.formdef import FormDef, FormdefImportError, fields
12 11
from wcs.qommon.misc import indent_xml as indent
13 12
from wcs.workflows import Workflow
14 13

  
15
from .utilities import create_temporary_pub
14
from .utilities import clean_temporary_pub, create_temporary_pub
16 15

  
17 16

  
18
def setup_module(module):
19
    cleanup()
20
    global pub
21
    pub = create_temporary_pub()
17
@pytest.fixture
18
def pub(request):
19
    return create_temporary_pub()
22 20

  
23 21

  
24 22
def teardown_module(module):
25
    shutil.rmtree(pub.APP_DIR)
23
    clean_temporary_pub()
26 24

  
27 25

  
28 26
def export_to_indented_xml(formdef, include_id=False):
......
55 53
    return formdef2
56 54

  
57 55

  
58
def test_empty():
56
def test_empty(pub):
59 57
    formdef = FormDef()
60 58
    formdef.name = 'empty'
61 59
    assert_xml_import_export_works(formdef)
62 60
    assert_json_import_export_works(formdef)
63 61

  
64 62

  
65
def test_text_attributes():
63
def test_text_attributes(pub):
66 64
    formdef = FormDef()
67 65
    formdef.name = 'Foo'
68 66
    formdef.url_name = 'foo'
......
72 70
    assert f2.url_name == formdef.url_name
73 71

  
74 72

  
75
def test_empty_description_tag():
73
def test_empty_description_tag(pub):
76 74
    formdef = FormDef()
77 75
    formdef.name = 'empty'
78 76
    assert_xml_import_export_works(formdef)
......
83 81
    assert not formdef2.description
84 82

  
85 83

  
86
def test_empty_display_locations_tag():
84
def test_empty_display_locations_tag(pub):
87 85
    formdef = FormDef()
88 86
    formdef.name = 'Foo'
89 87
    formdef.fields = [
......
113 111
    assert '<display_locations />' in str(ET.tostring(f3))
114 112

  
115 113

  
116
def test_boolean_attributes():
114
def test_boolean_attributes(pub):
117 115
    formdef = FormDef()
118 116
    formdef.name = 'Foo'
119 117
    formdef.url_name = 'foo'
......
127 125
    assert f2.confirmation == formdef.confirmation
128 126

  
129 127

  
130
def test_a_field():
128
def test_a_field(pub):
131 129
    formdef = FormDef()
132 130
    formdef.name = 'Foo'
133 131
    formdef.fields = [fields.StringField(type='string', id=1, label='Bar', size='40')]
......
137 135
    assert len(f2.fields) == len(formdef.fields)
138 136

  
139 137

  
140
def test_more_fields():
138
def test_more_fields(pub):
141 139
    formdef = FormDef()
142 140
    formdef.name = 'Blah'
143 141
    formdef.fields = [
......
160 158
    assert f2.fields[4].items == formdef.fields[4].items
161 159

  
162 160

  
163
def test_item_radio():
161
def test_item_radio(pub):
164 162
    formdef = FormDef()
165 163
    formdef.name = 'Blah'
166 164
    formdef.fields = [
......
193 191
    assert fd2.fields[0].display_mode == 'list'
194 192

  
195 193

  
196
def test_include_id():
194
def test_include_id(pub):
197 195
    formdef = FormDef()
198 196
    formdef.name = 'Blah'
199 197
    formdef.fields = [
......
217 215
    assert f2.fields[4].id == formdef.fields[4].id
218 216

  
219 217

  
220
def test_workflow_options():
218
def test_workflow_options(pub):
221 219
    formdef = FormDef()
222 220
    formdef.name = 'workflow options'
223 221
    formdef.workflow_options = {'foo': 'bar', 'foo2': 'baré'}
......
227 225
    assert fd2.workflow_options == formdef.workflow_options
228 226

  
229 227

  
230
def test_workflow_options_with_no_values():
228
def test_workflow_options_with_no_values(pub):
231 229
    formdef = FormDef()
232 230
    formdef.name = 'foo'
233 231
    formdef.workflow_options = {'foo': None, 'foo2': None}
......
237 235
    assert fd2.workflow_options == formdef.workflow_options
238 236

  
239 237

  
240
def test_workflow_options_with_file():
238
def test_workflow_options_with_file(pub):
241 239
    from quixote.http_request import Upload
242 240

  
243 241
    from wcs.qommon.form import UploadedFile
......
260 258
    assert formdef.workflow_options['foo'].get_content() == fd2.workflow_options['foo'].get_content()
261 259

  
262 260

  
263
def test_workflow_options_with_date():
261
def test_workflow_options_with_date(pub):
264 262
    formdef = FormDef()
265 263
    formdef.name = 'foo'
266 264
    formdef.workflow_options = {'foo': time.strptime('2014-02-02', '%Y-%m-%d')}
......
268 266
    assert formdef.workflow_options['foo'] == fd2.workflow_options['foo']
269 267

  
270 268

  
271
def test_workflow_reference():
269
def test_workflow_reference(pub):
272 270
    Workflow.wipe()
273 271
    FormDef.wipe()
274 272

  
......
302 300
    assert FormDef.import_from_xml_tree(formdef_xml_with_id, include_id=True).workflow_id is None
303 301

  
304 302

  
305
def test_category_reference():
303
def test_category_reference(pub):
306 304
    Category.wipe()
307 305
    FormDef.wipe()
308 306

  
......
336 334
    assert FormDef.import_from_xml_tree(formdef_xml_with_id, include_id=True).category_id is None
337 335

  
338 336

  
339
def test_file_field():
337
def test_file_field(pub):
340 338
    formdef = FormDef()
341 339
    formdef.name = 'foo'
342 340
    formdef.fields = [
......
359 357
    assert_json_import_export_works(formdef)
360 358

  
361 359

  
362
def test_invalid_field_type():
360
def test_invalid_field_type(pub):
363 361
    formdef = FormDef()
364 362
    formdef.name = 'foo'
365 363
    formdef.fields = [fields.StringField(id='1', type='XXX')]
......
368 366
        FormDef.import_from_xml(io.BytesIO(export), include_id=True)
369 367

  
370 368

  
371
def test_invalid_data_source():
369
def test_invalid_data_source(pub):
372 370
    # manually edited exports
373 371
    formdef = FormDef()
374 372
    formdef.name = 'foo'
......
386 384
    assert formdef2.fields[0].data_source == {}
387 385

  
388 386

  
389
def test_unknown_data_source():
387
def test_unknown_data_source(pub):
390 388
    formdef = FormDef()
391 389
    formdef.name = 'foo'
392 390
    formdef.fields = [
......
440 438
        FormDef.import_from_xml(io.BytesIO(export))
441 439

  
442 440

  
443
def test_duplicated_field_ids():
441
def test_formdef_with_block(pub):
442
    BlockDef.wipe()
443
    block = BlockDef()
444
    block.name = 'foobar'
445
    block.digest_template = 'X{{foobar_var_foo}}Y'
446
    block.fields = [
447
        fields.StringField(id='123', required=True, label='Test', type='string', varname='foo'),
448
    ]
449
    block.store()
450

  
451
    formdef = FormDef()
452
    formdef.name = 'foo'
453
    formdef.fields = [fields.BlockField(id='1', type='block:foobar')]
454

  
455
    BlockDef.wipe()
456
    export = ET.tostring(export_to_indented_xml(formdef))
457
    with pytest.raises(FormdefImportError, match='Unknown field type'):
458
        FormDef.import_from_xml(io.BytesIO(export))
459

  
460

  
461
def test_duplicated_field_ids(pub):
444 462
    formdef = FormDef()
445 463
    formdef.name = 'foo'
446 464
    formdef.fields = [
......
462 480
    assert formdef2.fields[2].id == '3'
463 481

  
464 482

  
465
def test_wrong_max_field_id():
483
def test_wrong_max_field_id(pub):
466 484
    formdef = FormDef()
467 485
    formdef.name = 'foo'
468 486
    formdef.fields = [
......
476 494
    assert formdef2.max_field_id == 2
477 495

  
478 496

  
479
def test_page_condition():
497
def test_page_condition(pub):
480 498
    formdef = FormDef()
481 499
    formdef.name = 'foo'
482 500
    formdef.fields = [fields.PageField(id='1', type='page', condition={'type': 'python', 'value': 'blah'})]
......
493 511
    assert fd2.fields[0].condition == formdef.fields[0].condition
494 512

  
495 513

  
496
def test_page_post_conditions():
514
def test_page_post_conditions(pub):
497 515
    formdef = FormDef()
498 516
    formdef.name = 'foo'
499 517
    formdef.fields = [
......
531 549
    assert fd2.fields[0].post_conditions[0]['error_message'] == ''
532 550

  
533 551

  
534
def test_workflow_roles():
552
def test_geolocations(pub):
553
    formdef = FormDef()
554
    formdef.name = 'foo'
555
    formdef.fields = []
556
    formdef.geolocations = {'base': 'Base'}
557
    fd2 = assert_xml_import_export_works(formdef, include_id=True)
558
    assert fd2.geolocations == formdef.geolocations
559
    fd3 = assert_json_import_export_works(formdef)
560
    assert fd3.geolocations == formdef.geolocations
561

  
562

  
563
def test_workflow_roles(pub):
535 564
    pub.role_class.wipe()
536 565
    role = pub.role_class(name='blah')
537 566
    role.store()
......
562 591
    assert fd2.workflow_roles.get('_receiver') is None
563 592

  
564 593

  
565
def test_geolocations():
566
    formdef = FormDef()
567
    formdef.name = 'foo'
568
    formdef.fields = []
569
    formdef.geolocations = {'base': 'Base'}
570
    fd2 = assert_xml_import_export_works(formdef, include_id=True)
571
    assert fd2.geolocations == formdef.geolocations
572
    fd3 = assert_json_import_export_works(formdef)
573
    assert fd3.geolocations == formdef.geolocations
574

  
575

  
576
def test_user_roles():
594
def test_user_roles(pub):
577 595
    pub.role_class.wipe()
578 596

  
579 597
    role = pub.role_class(name='blah')
......
600 618
    assert fd2.roles == ['logged-users']
601 619

  
602 620

  
603
def test_backoffice_submission_roles():
621
def test_backoffice_submission_roles(pub):
604 622
    pub.role_class.wipe()
605 623

  
606 624
    role = pub.role_class(name='blah')
......
614 632
    assert fd2.backoffice_submission_roles == formdef.backoffice_submission_roles
615 633

  
616 634

  
617
def test_required_authentication_contexts():
635
def test_required_authentication_contexts(pub):
618 636
    formdef = FormDef()
619 637
    formdef.name = 'foo'
620 638
    formdef.fields = []
......
623 641
    assert fd2.required_authentication_contexts == formdef.required_authentication_contexts
624 642

  
625 643

  
626
def test_field_condition():
644
def test_field_condition(pub):
627 645
    formdef = FormDef()
628 646
    formdef.name = 'Foo'
629 647
    formdef.fields = [
......
636 654
    assert f2.fields[0].condition == {'type': 'django', 'value': '1'}
637 655

  
638 656

  
639
def test_field_validation():
657
def test_field_validation(pub):
640 658
    formdef = FormDef()
641 659
    formdef.name = 'Foo'
642 660
    formdef.fields = [fields.StringField(type='string', id=1, label='Bar', size='40', validation={})]
......
669 687
    assert f2.fields[0].validation == {'type': 'regex', 'value': '\\d'}
670 688

  
671 689

  
672
def test_digest_templates():
690
def test_digest_templates(pub):
673 691
    formdef = FormDef()
674 692
    formdef.name = 'Foo'
675 693
    formdef.fields = []
......
678 696
    assert f2.digest_templates == formdef.digest_templates
679 697

  
680 698

  
681
def test_field_prefill():
699
def test_field_prefill(pub):
682 700
    formdef = FormDef()
683 701
    formdef.name = 'Foo'
684 702
    formdef.fields = [
......
734 752
    assert f2.fields[0].prefill == {'type': 'string', 'value': None}
735 753

  
736 754

  
737
def test_custom_views():
755
def test_custom_views(pub):
738 756
    formdef = FormDef()
739 757
    formdef.name = 'foo'
740 758
    formdef.fields = [
741
-