Projet

Général

Profil

0004-toulouse_axel-some-values-are-not-editable-38543.patch

Lauréline Guérin, 13 janvier 2020 16:40

Télécharger (49,5 ko)

Voir les différences:

Subject: [PATCH 4/5] toulouse_axel: some values are not editable (#38543)

and it will be NOT sent by w.c.s.
 functests/toulouse_axel/test_toulouse_axel.py |   7 +-
 passerelle/contrib/toulouse_axel/models.py    |  30 +-
 .../flat_update_family_info.json              |  15 -
 .../toulouse_axel/update_family_info.json     |  15 -
 tests/test_toulouse_axel.py                   | 258 +++++++++++++-----
 5 files changed, 220 insertions(+), 105 deletions(-)
functests/toulouse_axel/test_toulouse_axel.py
38 38
    # remove non editable fields
39 39
    for key in ['SITUATIONFAMILIALE', 'NBENFANTACTIF', 'NBRLACTIF', 'IDDUI', 'CODEMISEAJOUR']:
40 40
        payload.pop(key)
41
    for key in ['MONTANTTOTAL', 'DATEVALIDITE', 'SFI', 'IREVENUS', 'RNF']:
41
    for key in ['IDPERSONNE', 'NOM', 'PRENOM', 'NOMJEUNEFILLE', 'DATENAISSANCE', 'CIVILITE', 'INDICATEURRL']:
42
        if 'RL1' in payload:
43
            payload['RL1'].pop(key)
44
        if 'RL2' in payload:
45
            payload['RL2'].pop(key)
46
    for key in ['MONTANTTOTAL', 'DATEVALIDITE', 'SFI', 'IREVENUS', 'RNF', 'NBENFANTSACHARGE']:
42 47
        payload['REVENUS'].pop(key, None)
43 48
    for enfant in payload['ENFANT']:
44 49
        for key in ['NOM', 'DATENAISSANCE', 'SEXE', 'PRENOMPERE', 'PRENOMMERE', 'NOMPERE', 'NOMMERE', 'RATTACHEAUTREDUI', 'PRENOM']:
passerelle/contrib/toulouse_axel/models.py
312 312
    UPDATE_FAMILY_SCHEMA['required'].remove('IDDUI')
313 313
    UPDATE_FAMILY_SCHEMA['required'].remove('DATEDEMANDE')
314 314
    UPDATE_FAMILY_SCHEMA['required'].remove('QUIACTUALISEDUI')
315
    for key in ['IDPERSONNE', 'NOM', 'PRENOM', 'NOMJEUNEFILLE', 'DATENAISSANCE', 'CIVILITE', 'INDICATEURRL']:
316
        UPDATE_FAMILY_SCHEMA['properties']['RL1']['properties'].pop(key)
317
        UPDATE_FAMILY_SCHEMA['properties']['RL1']['required'].remove(key)
318
        UPDATE_FAMILY_SCHEMA['properties']['RL2']['properties'].pop(key)
319
        UPDATE_FAMILY_SCHEMA['properties']['RL2']['required'].remove(key)
320
    UPDATE_FAMILY_SCHEMA['properties']['REVENUS']['properties'].pop('NBENFANTSACHARGE')
321
    UPDATE_FAMILY_SCHEMA['properties']['REVENUS']['required'].remove('NBENFANTSACHARGE')
322

  
315 323
    handicap_fields = [
316 324
        'AUTREDIFFICULTE',
317 325
        'ECOLESPECIALISEE',
......
612 620
                })
613 621
            child['SANITAIRE']['ALLERGIE'] = new_allergie
614 622

  
623
        # retrieve RL not posted fields
624
        for rl in ['RL1', 'RL2']:
625
            if rl not in post_data:
626
                continue
627
            if family_data is None:
628
                family_data = self.get_family_data(name_id)
629
            # fill missing fields
630
            for key in ['IDPERSONNE', 'NOM', 'PRENOM', 'NOMJEUNEFILLE', 'DATENAISSANCE', 'CIVILITE']:
631
                post_data[rl][key] = family_data[rl][key]
632
            post_data[rl]['INDICATEURRL'] = '1' if rl == 'RL1' else '2'
633

  
634
        # fill NBENFANTSACHARGE
635
        if 'REVENUS' in post_data:
636
            if family_data is None:
637
                family_data = self.get_family_data(name_id)
638
            post_data['REVENUS']['NBENFANTSACHARGE'] = family_data.get('REVENUS', {}).get('NBENFANTSACHARGE')
639

  
615 640
        # transform ENFANT dict to a list back
616 641
        post_data['ENFANT'] = post_data['ENFANT'].values()
617 642

  
......
638 663
        # prepare data
639 664
        post_data['IDDUI'] = link.dui
640 665
        post_data['DATEDEMANDE'] = datetime.date.today().strftime('%Y-%m-%d')
666

  
667
        self.sanitize_update_family_data(name_id=NameID, post_data=post_data)
668

  
641 669
        if 'RL2' in post_data and post_data['RL2'].get('IDPERSONNE') == link.person_id:
642 670
            post_data['QUIACTUALISEDUI'] = '2'
643 671
        else:
644 672
            post_data['QUIACTUALISEDUI'] = '1'
645 673

  
646
        self.sanitize_update_family_data(name_id=NameID, post_data=post_data)
647

  
648 674
        try:
649 675
            result = form_maj_famille_dui(self, {'PORTAIL': {'DUI': post_data}})
650 676
        except AxelError as e:
tests/data/toulouse_axel/flat_update_family_info.json
97 97
  "REACTUALISATIONENLIGNE": "NON",
98 98
  "REVENUS/ALLOCATAIRE": "2",
99 99
  "REVENUS/CHOIXREVENU": "",
100
  "REVENUS/NBENFANTSACHARGE": 2,
101 100
  "REVENUS/NUMEROCAF": "1234",
102 101
  "REVENUS/TYPEREGIME": "GENE",
103 102
  "RL1/ADREMPLOYEUR/CODEINSEEVILLE": "",
......
109 108
  "RL1/ADREMPLOYEUR/NUMVOIE": "",
110 109
  "RL1/ADREMPLOYEUR/VILLE": "",
111 110
  "RL1/ADREMPLOYEUR/VOIE": "",
112
  "RL1/CIVILITE": "M",
113 111
  "RL1/COURRIEL": "foo@bar.com",
114 112
  "RL1/CSP": "ETU",
115
  "RL1/DATENAISSANCE": "1980-01-01",
116
  "RL1/IDPERSONNE": "42",
117
  "RL1/INDICATEURRL": "1",
118
  "RL1/NOM": "foo",
119 113
  "RL1/NOMEMPLOYEUR": "foo",
120
  "RL1/NOMJEUNEFILLE": "",
121
  "RL1/PRENOM": "foo",
122 114
  "RL1/PROFESSION": "ETUDIANT",
123 115
  "RL1/TELPORTABLE": "0606060606",
124 116
  "RL2/ADREMPLOYEUR/CODEINSEEVILLE": "",
......
130 122
  "RL2/ADREMPLOYEUR/NUMVOIE": "",
131 123
  "RL2/ADREMPLOYEUR/VILLE": "",
132 124
  "RL2/ADREMPLOYEUR/VOIE": "",
133
  "RL2/CIVILITE": "MME",
134 125
  "RL2/COURRIEL": "foo@bar.com",
135 126
  "RL2/CSP": "EMP",
136
  "RL2/DATENAISSANCE": "1980-01-01",
137
  "RL2/IDPERSONNE": "35",
138
  "RL2/INDICATEURRL": "2",
139
  "RL2/NOM": "foo",
140 127
  "RL2/NOMEMPLOYEUR": "foo",
141
  "RL2/NOMJEUNEFILLE": "",
142
  "RL2/PRENOM": "foo",
143 128
  "RL2/PROFESSION": "foo",
144 129
  "RL2/TELPORTABLE": "0606060606",
145 130
  "TELFIXE": "",
tests/data/toulouse_axel/update_family_info.json
138 138
    "REVENUS": {
139 139
        "ALLOCATAIRE": "2",
140 140
        "CHOIXREVENU": "",
141
        "NBENFANTSACHARGE": 2,
142 141
        "NUMEROCAF": "1234",
143 142
        "TYPEREGIME": "GENE"
144 143
    },
......
154 153
            "VILLE": null,
155 154
            "VOIE": null
156 155
        },
157
        "CIVILITE": "M",
158 156
        "COURRIEL": "foo@bar.com",
159 157
        "CSP": "ETU",
160
        "DATENAISSANCE": "1980-01-01",
161
        "IDPERSONNE": "42",
162
        "INDICATEURRL": "1",
163
        "NOM": "foo",
164 158
        "NOMEMPLOYEUR": "foo",
165
        "NOMJEUNEFILLE": null,
166
        "PRENOM": "foo",
167 159
        "PROFESSION": "ETUDIANT",
168 160
        "TELPORTABLE": "0606060606"
169 161
    },
......
179 171
            "VILLE": null,
180 172
            "VOIE": null
181 173
        },
182
        "CIVILITE": "MME",
183 174
        "COURRIEL": "foo@bar.com",
184 175
        "CSP": "EMP",
185
        "DATENAISSANCE": "1980-01-01",
186
        "IDPERSONNE": "35",
187
        "INDICATEURRL": "2",
188
        "NOM": "foo",
189 176
        "NOMEMPLOYEUR": "foo",
190
        "NOMJEUNEFILLE": null,
191
        "PRENOM": "foo",
192 177
        "PROFESSION": "foo",
193 178
        "TELPORTABLE": "0606060606"
194 179
    },
tests/test_toulouse_axel.py
20 20
import json
21 21
import mock
22 22
import os
23
import xml.etree.ElementTree as ET
23 24

  
24 25
import pytest
25 26
import xmlschema
......
66 67
    return json.loads(content)
67 68

  
68 69

  
70
@pytest.fixture
71
def family_data():
72
    filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/family_info.xml')
73
    with open(filepath) as xml:
74
        content = xml.read()
75
    resp = '''
76
    <?xml version="1.0"?>
77
    <PORTAILSERVICE>
78
      <RESULTAT>
79
        <TYPE>RefFamilleDui</TYPE>
80
        <STATUS>OK</STATUS>
81
        <DATE>10/10/2010 10:10:01</DATE>
82
        <COMMENTAIRES><![CDATA[]]></COMMENTAIRES>
83
      </RESULTAT>
84
      <DATA>
85
        %s
86
      </DATA>
87
    </PORTAILSERVICE>
88
    '''.strip() % content
89
    return ref_famille_dui.response_converter.decode(ET.fromstring(resp))['DATA']['PORTAIL']['DUI']
90

  
91

  
69 92
@pytest.fixture
70 93
def flat_update_params():
71 94
    filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/flat_update_family_info.json')
......
564 587
    ])
565 588

  
566 589

  
567
def test_update_family_info_endpoint_axel_error(app, resource, update_params):
590
def test_update_family_info_endpoint_axel_error(app, resource, update_params, family_data):
568 591
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
592

  
569 593
    with mock.patch('passerelle.contrib.toulouse_axel.models.form_maj_famille_dui') as operation:
570 594
        operation.side_effect = AxelError('FooBar')
571
        resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
595
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
596
            resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
572 597
    assert resp.json['err_desc'] == "Axel error: FooBar"
573 598
    assert resp.json['err'] == 'error'
574 599
    assert 'error_post_data' in resp.json['data']
......
580 605
    assert resp.json['err'] == 'not-found'
581 606

  
582 607

  
583
def test_update_family_info_endpoint(app, resource, update_params):
608
def test_update_family_info_endpoint(app, resource, update_params, family_data):
584 609
    link = Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
610

  
585 611
    content = "<PORTAIL/>"
586 612
    with mock_getdata(content, 'FormMajFamilleDui'):
587
        resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
613
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
614
            resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
588 615
    assert resp.json['err'] == 0
589 616
    assert resp.json['dui'] == 'XXX'
590 617
    assert resp.json['updated'] is True
......
594 621

  
595 622
    with mock.patch('passerelle.contrib.toulouse_axel.models.form_maj_famille_dui') as operation:
596 623
        operation.return_value = OperationResult(json_response={}, xml_request='', xml_response='')
597
        resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
624
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
625
            resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
598 626
    assert operation.call_args_list[0][0][1]['PORTAIL']['DUI']['IDDUI'] == 'XXX'
599 627
    assert operation.call_args_list[0][0][1]['PORTAIL']['DUI']['DATEDEMANDE'] == datetime.date.today().strftime('%Y-%m-%d')
600 628
    assert operation.call_args_list[0][0][1]['PORTAIL']['DUI']['QUIACTUALISEDUI'] == '1'
......
603 631
    link.save()
604 632
    with mock.patch('passerelle.contrib.toulouse_axel.models.form_maj_famille_dui') as operation:
605 633
        operation.return_value = OperationResult(json_response={}, xml_request='', xml_response='')
606
        resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
634
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
635
            resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=update_params)
607 636
    assert operation.call_args_list[0][0][1]['PORTAIL']['DUI']['IDDUI'] == 'XXX'
608 637
    assert operation.call_args_list[0][0][1]['PORTAIL']['DUI']['DATEDEMANDE'] == datetime.date.today().strftime('%Y-%m-%d')
609 638
    assert operation.call_args_list[0][0][1]['PORTAIL']['DUI']['QUIACTUALISEDUI'] == '2'
610 639

  
611 640

  
612
def test_update_family_info_flat_endpoint(app, resource, flat_update_params):
641
def test_update_family_info_flat_endpoint(app, resource, flat_update_params, family_data):
613 642
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
614 643
    content = "<PORTAIL/>"
615 644
    with mock_getdata(content, 'FormMajFamilleDui'):
616
        resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=flat_update_params)
645
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
646
            resp = app.post_json('/toulouse-axel/test/update_family_info?NameID=yyy', params=flat_update_params)
617 647
    assert resp.json['err'] == 0
618 648
    assert resp.json['dui'] == 'XXX'
619 649
    assert resp.json['updated'] is True
......
622 652
    assert 'xml_response' in resp.json['data']
623 653

  
624 654

  
625
def test_sanitize_update_family_data_adresse(app, resource, update_params):
655
def test_sanitize_update_family_data_missing_rl_fields(app, resource, update_params, family_data):
656
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
657

  
658
    full_update_params = copy.deepcopy(update_params)
659
    for key in ['IDPERSONNE', 'NOM', 'PRENOM', 'NOMJEUNEFILLE', 'DATENAISSANCE', 'CIVILITE']:
660
        assert key not in full_update_params['RL1']
661
        assert key not in full_update_params['RL2']
662

  
663
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
664
        resource.sanitize_update_family_data(name_id='yyy', post_data=full_update_params)
665
    for key in ['IDPERSONNE', 'NOM', 'PRENOM', 'NOMJEUNEFILLE', 'DATENAISSANCE', 'CIVILITE']:
666
        assert full_update_params['RL1'][key] == family_data['RL1'][key]
667
        assert full_update_params['RL2'][key] == family_data['RL2'][key]
668
    assert full_update_params['RL1']['INDICATEURRL'] == '1'
669
    assert full_update_params['RL2']['INDICATEURRL'] == '2'
670

  
671

  
672
def test_sanitize_update_family_data_missing_revenus_fields(app, resource, update_params, family_data):
673
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
674

  
675
    full_update_params = copy.deepcopy(update_params)
676
    assert 'NBENFANTSACHARGE' not in update_params['REVENUS']
677

  
678
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
679
        resource.sanitize_update_family_data(name_id='yyy', post_data=full_update_params)
680
    assert full_update_params['REVENUS']['NBENFANTSACHARGE'] == family_data['REVENUS']['NBENFANTSACHARGE']
681

  
682
    # if revenus are not set in Axel
683
    full_update_params = copy.deepcopy(update_params)
684
    family_data.pop('REVENUS')
685
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
686
        resource.sanitize_update_family_data(name_id='yyy', post_data=full_update_params)
687
    assert full_update_params['REVENUS']['NBENFANTSACHARGE'] is None
688

  
689

  
690
def test_sanitize_update_family_data_adresse(app, resource, update_params, family_data):
626 691
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
627 692

  
628 693
    # test maj:adresse
......
630 695
    partial_update_params['maj:adresse'] = False
631 696
    for key in partial_update_params['ADRESSE'].keys():
632 697
        partial_update_params['ADRESSE'][key] = None  # reset fields
633
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
698
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
699
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
634 700
    for value in partial_update_params['ADRESSE'].values():
635 701
        assert value is None
636 702

  
637 703

  
638
def test_sanitize_update_family_data_revenus(app, resource, update_params):
704
def test_sanitize_update_family_data_revenus(app, resource, update_params, family_data):
639 705
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
640 706

  
641 707
    # test maj:revenus
......
643 709
    partial_update_params['maj:revenus'] = False
644 710
    for key in partial_update_params['REVENUS'].keys():
645 711
        partial_update_params['REVENUS'][key] = None  # reset fields
646
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
712
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
713
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
647 714
    assert 'REVENUS' not in partial_update_params
648 715

  
649 716

  
650
def test_sanitize_update_family_data_rln(app, resource, update_params):
717
def test_sanitize_update_family_data_rln(app, resource, update_params, family_data):
651 718
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
652 719

  
653 720
    # test maj:rln
......
655 722
    partial_update_params['maj:rl1'] = False
656 723
    for key in partial_update_params['RL1'].keys():
657 724
        partial_update_params['RL1'][key] = None  # reset fields
658
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
725
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
726
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
659 727
    assert 'RL1' not in partial_update_params
660 728
    partial_update_params = copy.deepcopy(update_params)
661 729
    partial_update_params['maj:rl2'] = False
662 730
    for key in partial_update_params['RL2'].keys():
663 731
        partial_update_params['RL2'][key] = None  # reset fields
664
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
732
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
733
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
665 734
    assert 'RL2' not in partial_update_params
666 735

  
667 736

  
668
def test_sanitize_update_family_data_rln_adresse_employeur(app, resource, update_params):
737
def test_sanitize_update_family_data_rln_adresse_employeur(app, resource, update_params, family_data):
669 738
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
670 739

  
671 740
    # test maj:rln_adresse_employeur
......
673 742
    partial_update_params['maj:rl1_adresse_employeur'] = False
674 743
    for key in partial_update_params['RL1']['ADREMPLOYEUR'].keys():
675 744
        partial_update_params['RL1']['ADREMPLOYEUR'][key] = None  # reset fields
676
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
745
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
746
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
677 747
    assert 'ADREMPLOYEUR' not in partial_update_params['RL1']
678 748
    partial_update_params = copy.deepcopy(update_params)
679 749
    partial_update_params['maj:rl2_adresse_employeur'] = False
680 750
    for key in partial_update_params['RL2']['ADREMPLOYEUR'].keys():
681 751
        partial_update_params['RL2']['ADREMPLOYEUR'][key] = None  # reset fields
682
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
752
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
753
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
683 754
    assert 'ADREMPLOYEUR' not in partial_update_params['RL2']
684 755
    # combine with maj:rln
685 756
    partial_update_params = copy.deepcopy(update_params)
686 757
    partial_update_params['maj:rl1'] = False
687 758
    partial_update_params['maj:rl1_adresse_employeur'] = False
688
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
759
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
760
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
689 761
    assert 'RL1' not in partial_update_params
690 762
    partial_update_params = copy.deepcopy(update_params)
691 763
    partial_update_params['maj:rl2'] = False
692 764
    partial_update_params['maj:rl2_adresse_employeur'] = False
693
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
765
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
766
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
694 767
    assert 'RL2' not in partial_update_params
695 768

  
696 769
    # test maj:rln_adresse_employeur not set
697 770
    for val in [None, '']:
698 771
        partial_update_params = copy.deepcopy(update_params)
699 772
        partial_update_params['maj:rl1_adresse_employeur'] = val
700
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
773
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
774
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
701 775
        assert 'ADREMPLOYEUR' not in partial_update_params['RL1']
702 776
        partial_update_params = copy.deepcopy(update_params)
703 777
        partial_update_params['maj:rl2_adresse_employeur'] = val
704
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
778
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
779
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
705 780
        assert 'ADREMPLOYEUR' not in partial_update_params['RL2']
706 781

  
707 782

  
708
def test_sanitize_update_family_data_enfant_n(app, resource, update_params):
783
def test_sanitize_update_family_data_enfant_n(app, resource, update_params, family_data):
709 784
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
710 785

  
711 786
    # test maj:enfant_n
......
715 790
        if key == 'IDPERSONNE':
716 791
            continue
717 792
        partial_update_params['ENFANT'][0][key] = None  # reset fields
718
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
793
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
794
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
719 795
    assert len(partial_update_params['ENFANT']) == 1
720 796
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
721 797

  
......
725 801
        if key == 'IDPERSONNE':
726 802
            continue
727 803
        partial_update_params['ENFANT'][1][key] = None  # reset fields
728
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
804
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
805
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
729 806
    assert len(partial_update_params['ENFANT']) == 1
730 807
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
731 808

  
......
734 811
    partial_update_params['maj:enfant_1'] = False
735 812
    for key in partial_update_params['ENFANT'][1].keys():
736 813
        partial_update_params['ENFANT'][1][key] = None  # reset fields
737
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
814
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
815
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
738 816
    assert len(partial_update_params['ENFANT']) == 1
739 817
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
740 818

  
......
742 820
    partial_update_params = copy.deepcopy(update_params)
743 821
    partial_update_params['maj:enfant_0'] = False
744 822
    partial_update_params['maj:enfant_1'] = False
745
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
823
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
824
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
746 825
    assert 'ENFANT' not in partial_update_params
747 826

  
748 827
    # unknown child
749 828
    partial_update_params = copy.deepcopy(update_params)
750 829
    partial_update_params['maj:enfant_5'] = False
751
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
830
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
831
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
752 832
    assert len(partial_update_params['ENFANT']) == 2
753 833

  
754 834

  
755
def test_sanitize_update_family_data_enfant_n_assurance(app, resource, update_params):
835
def test_sanitize_update_family_data_enfant_n_assurance(app, resource, update_params, family_data):
756 836
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
757 837

  
758 838
    # test maj:enfant_n_assurance
......
761 841
    for key in partial_update_params['ENFANT'][1]['ASSURANCE'].keys():
762 842
        partial_update_params['ENFANT'][1]['ASSURANCE'][key] = None  # reset fields
763 843
    partial_update_params['maj:enfant_0'] = False  # check that ordering is not a problem
764
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
844
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
845
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
765 846
    assert len(partial_update_params['ENFANT']) == 1
766 847
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
767 848
    assert 'ASSURANCE' not in partial_update_params['ENFANT'][0]
......
770 851
    partial_update_params['maj:enfant_1'] = False
771 852
    partial_update_params['maj:enfant_1_assurance'] = False
772 853
    partial_update_params['maj:enfant_0'] = False
773
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
854
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
855
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
774 856
    assert 'ENFANT' not in partial_update_params
775 857

  
776 858
    # test maj:enfant_n_assurance not set
......
778 860
        partial_update_params = copy.deepcopy(update_params)
779 861
        partial_update_params['maj:enfant_1_assurance'] = val
780 862
        partial_update_params['maj:enfant_0'] = False
781
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
863
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
864
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
782 865
        assert 'ASSURANCE' not in partial_update_params['ENFANT'][0]
783 866

  
784 867

  
785
def test_sanitize_update_family_data_enfant_n_contact(app, resource, update_params):
868
def test_sanitize_update_family_data_enfant_n_contact(app, resource, update_params, family_data):
786 869
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
787 870

  
788 871
    # test maj:enfant_n_contact
......
792 875
        for key in contact.keys():
793 876
            partial_update_params['ENFANT'][0]['CONTACT'][i][key] = None  # reset fields
794 877
    partial_update_params['maj:enfant_1'] = False
795
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
878
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
879
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
796 880
    assert len(partial_update_params['ENFANT']) == 1
797 881
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
798 882
    assert 'CONTACT' not in partial_update_params['ENFANT'][0]
......
801 885
    partial_update_params['maj:enfant_1'] = False
802 886
    partial_update_params['maj:enfant_1_contact'] = False
803 887
    partial_update_params['maj:enfant_0'] = False
804
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
888
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
889
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
805 890
    assert 'ENFANT' not in partial_update_params
806 891

  
807 892
    # test maj:enfant_n_contact not set
......
809 894
        partial_update_params = copy.deepcopy(update_params)
810 895
        partial_update_params['maj:enfant_0_contact'] = val
811 896
        partial_update_params['maj:enfant_1'] = False
812
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
897
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
898
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
813 899
        assert 'CONTACT' not in partial_update_params['ENFANT'][0]
814 900

  
815 901

  
816
def test_sanitize_update_family_data_enfant_n_sanitaire(app, resource, update_params):
902
def test_sanitize_update_family_data_enfant_n_sanitaire(app, resource, update_params, family_data):
817 903
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
818 904

  
819 905
    # test maj:enfant_n_sanitaire
......
822 908
    for key in partial_update_params['ENFANT'][1]['SANITAIRE'].keys():
823 909
        partial_update_params['ENFANT'][1]['SANITAIRE'][key] = None  # reset fields
824 910
    partial_update_params['maj:enfant_0'] = False
825
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
911
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
912
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
826 913
    assert len(partial_update_params['ENFANT']) == 1
827 914
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
828 915
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
831 918
    partial_update_params['maj:enfant_1'] = False
832 919
    partial_update_params['maj:enfant_1_sanitaire'] = False
833 920
    partial_update_params['maj:enfant_0'] = False
834
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
921
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
922
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
835 923
    assert 'ENFANT' not in partial_update_params
836 924

  
837 925
    # test maj:enfant_n_sanitaire not set
......
839 927
        partial_update_params = copy.deepcopy(update_params)
840 928
        partial_update_params['maj:enfant_0_sanitaire'] = val
841 929
        partial_update_params['maj:enfant_1_sanitaire'] = val
842
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
930
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
931
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
843 932
        assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
844 933
        assert 'SANITAIRE' not in partial_update_params['ENFANT'][1]
845 934

  
846 935

  
847
def test_sanitize_update_family_data_enfant_n_sanitaire_allergie(app, resource, update_params):
936
def test_sanitize_update_family_data_enfant_n_sanitaire_allergie(app, resource, update_params, family_data):
848 937
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
849 938

  
850 939
    # test maj:enfant_n_sanitaire_allergie
......
853 942
    for key in partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'].keys():
854 943
        partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'][key] = None  # reset fields
855 944
    partial_update_params['maj:enfant_0'] = False
856
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
945
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
946
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
857 947
    assert len(partial_update_params['ENFANT']) == 1
858 948
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
859 949
    assert 'ALLERGIE' not in partial_update_params['ENFANT'][0]['SANITAIRE']
......
862 952
    partial_update_params['maj:enfant_1_sanitaire'] = False
863 953
    partial_update_params['maj:enfant_1_sanitaire_allergie'] = False
864 954
    partial_update_params['maj:enfant_0'] = False
865
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
955
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
956
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
866 957
    assert len(partial_update_params['ENFANT']) == 1
867 958
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
868 959
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
871 962
    partial_update_params['maj:enfant_1'] = False
872 963
    partial_update_params['maj:enfant_1_sanitaire_allergie'] = False
873 964
    partial_update_params['maj:enfant_0'] = False
874
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
965
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
966
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
875 967
    assert 'ENFANT' not in partial_update_params
876 968

  
877 969
    # test maj:enfant_n_sanitaire_allergie not set
......
879 971
        partial_update_params = copy.deepcopy(update_params)
880 972
        partial_update_params['maj:enfant_0_sanitaire_allergie'] = val
881 973
        partial_update_params['maj:enfant_1_sanitaire_allergie'] = val
882
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
974
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
975
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
883 976
        assert 'ALLERGIE' not in partial_update_params['ENFANT'][0]['SANITAIRE']
884 977
        assert 'ALLERGIE' not in partial_update_params['ENFANT'][1]['SANITAIRE']
885 978

  
......
890 983
    partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['MEDICAMENTEUSES'] = 'NON'
891 984
    partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'NON'
892 985
    partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = ''
893
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
986
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
987
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
894 988
    assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [
895 989
        {'TYPE': 'ASTHME', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None},
896 990
        {'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'NON', 'NOMALLERGIE': None},
......
903 997
    partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['MEDICAMENTEUSES'] = 'OUI'
904 998
    partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['ALIMENTAIRES'] = 'OUI'
905 999
    partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE']['AUTRES'] = 'accariens'
906
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1000
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1001
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
907 1002
    assert partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'] == [
908 1003
        {'TYPE': 'ASTHME', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None},
909 1004
        {'TYPE': 'MEDICAMENTEUSES', 'ALLERGIQUE': 'OUI', 'NOMALLERGIE': None},
......
912 1007
    ]
913 1008

  
914 1009

  
915
def test_sanitize_update_family_data_enfant_n_sanitaire_medecin(app, resource, update_params):
1010
def test_sanitize_update_family_data_enfant_n_sanitaire_medecin(app, resource, update_params, family_data):
916 1011
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
917 1012

  
918 1013
    # test maj:enfant_n_sanitaire_medecin
......
921 1016
    for key in partial_update_params['ENFANT'][1]['SANITAIRE']['MEDECIN'].keys():
922 1017
        partial_update_params['ENFANT'][1]['SANITAIRE']['MEDECIN'][key] = None  # reset fields
923 1018
    partial_update_params['maj:enfant_0'] = False
924
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1019
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1020
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
925 1021
    assert len(partial_update_params['ENFANT']) == 1
926 1022
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
927 1023
    assert 'MEDECIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
......
930 1026
    partial_update_params['maj:enfant_1_sanitaire'] = False
931 1027
    partial_update_params['maj:enfant_1_sanitaire_medecin'] = False
932 1028
    partial_update_params['maj:enfant_0'] = False
933
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1029
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1030
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
934 1031
    assert len(partial_update_params['ENFANT']) == 1
935 1032
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
936 1033
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
939 1036
    partial_update_params['maj:enfant_1'] = False
940 1037
    partial_update_params['maj:enfant_1_sanitaire_medecin'] = False
941 1038
    partial_update_params['maj:enfant_0'] = False
942
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1039
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1040
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
943 1041
    assert 'ENFANT' not in partial_update_params
944 1042

  
945 1043
    # test maj:enfant_n_sanitaire_medecin not set
......
947 1045
        partial_update_params = copy.deepcopy(update_params)
948 1046
        partial_update_params['maj:enfant_0_sanitaire_medecin'] = val
949 1047
        partial_update_params['maj:enfant_1_sanitaire_medecin'] = val
950
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1048
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1049
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
951 1050
        assert 'MEDECIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
952 1051
        assert 'MEDECIN' not in partial_update_params['ENFANT'][1]['SANITAIRE']
953 1052

  
954 1053

  
955
def test_sanitize_update_family_data_enfant_n_sanitaire_vaccin(app, resource, update_params):
1054
def test_sanitize_update_family_data_enfant_n_sanitaire_vaccin(app, resource, update_params, family_data):
956 1055
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
957 1056

  
958 1057
    # test maj:enfant_n_sanitaire_vaccin
......
961 1060
    for key in partial_update_params['ENFANT'][1]['SANITAIRE']['VACCIN'].keys():
962 1061
        partial_update_params['ENFANT'][1]['SANITAIRE']['VACCIN'][key] = None  # reset fields
963 1062
    partial_update_params['maj:enfant_0'] = False
964
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1063
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1064
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
965 1065
    assert len(partial_update_params['ENFANT']) == 1
966 1066
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
967 1067
    assert 'VACCIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
......
970 1070
    partial_update_params['maj:enfant_1_sanitaire'] = False
971 1071
    partial_update_params['maj:enfant_1_sanitaire_vaccin'] = False
972 1072
    partial_update_params['maj:enfant_0'] = False
973
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1073
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1074
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
974 1075
    assert len(partial_update_params['ENFANT']) == 1
975 1076
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
976 1077
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
979 1080
    partial_update_params['maj:enfant_1'] = False
980 1081
    partial_update_params['maj:enfant_1_sanitaire_vaccin'] = False
981 1082
    partial_update_params['maj:enfant_0'] = False
982
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1083
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1084
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
983 1085
    assert 'ENFANT' not in partial_update_params
984 1086

  
985 1087
    # test maj:enfant_n_sanitaire_vaccin not set
......
987 1089
        partial_update_params = copy.deepcopy(update_params)
988 1090
        partial_update_params['maj:enfant_0_sanitaire_vaccin'] = val
989 1091
        partial_update_params['maj:enfant_1_sanitaire_vaccin'] = val
990
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1092
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1093
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
991 1094
        assert 'VACCIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
992 1095
        assert 'VACCIN' not in partial_update_params['ENFANT'][1]['SANITAIRE']
993 1096

  
994 1097

  
995
def test_sanitize_update_family_data_enfant_n_sanitaire_handicap(app, resource, update_params):
1098
def test_sanitize_update_family_data_enfant_n_sanitaire_handicap(app, resource, update_params, family_data):
996 1099
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
997 1100

  
998 1101
    # test maj:enfant_n_contact
999
    filepath = os.path.join(os.path.dirname(__file__), 'data/toulouse_axel/family_info.xml')
1000
    with open(filepath) as xml:
1001
        content = xml.read()
1002 1102
    partial_update_params = copy.deepcopy(update_params)
1003 1103
    partial_update_params['maj:enfant_0_sanitaire_handicap'] = False
1004 1104
    # reset fields
......
1013 1113
    for key in handicap_fields:
1014 1114
        partial_update_params['ENFANT'][0]['SANITAIRE']['HANDICAP'][key] = None
1015 1115
    partial_update_params['maj:enfant_1'] = False
1016
    with mock_getdata(content, 'RefFamilleDui'):
1116
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1017 1117
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1018
        original_values = resource.get_family_data(name_id='yyy')['ENFANT'][0]['SANITAIRE']
1019 1118
    assert len(partial_update_params['ENFANT']) == 1
1020 1119
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
1021 1120
    # fields were set with origin values found in Axel
1022 1121
    new_values = partial_update_params['ENFANT'][0]['SANITAIRE']
1023 1122
    for key in handicap_fields:
1024
        assert new_values[key] == original_values[key]
1123
        assert new_values[key] == family_data['ENFANT'][0]['SANITAIRE'][key]
1025 1124
    # combine with maj:enfant_n_sanitaire
1026 1125
    partial_update_params = copy.deepcopy(update_params)
1027 1126
    partial_update_params['maj:enfant_1_sanitaire'] = False
1028 1127
    partial_update_params['maj:enfant_1_sanitaire_handicap'] = False
1029 1128
    partial_update_params['maj:enfant_0'] = False
1030
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1129
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1130
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1031 1131
    assert len(partial_update_params['ENFANT']) == 1
1032 1132
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
1033 1133
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
1036 1136
    partial_update_params['maj:enfant_1'] = False
1037 1137
    partial_update_params['maj:enfant_1_sanitaire_sanitaire'] = False
1038 1138
    partial_update_params['maj:enfant_0'] = False
1039
    resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1139
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1140
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1040 1141
    assert 'ENFANT' not in partial_update_params
1041 1142

  
1042 1143
    # test maj:enfant_n_sanitaire_handicap not set
......
1047 1148
        # reset fields
1048 1149
        for key in handicap_fields:
1049 1150
            partial_update_params['ENFANT'][0]['SANITAIRE']['HANDICAP'][key] = None
1050
        with mock.patch('passerelle.contrib.toulouse_axel.models.ref_famille_dui') as operation:
1151
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1051 1152
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1052
        assert operation.call_args_list == [mock.call(resource, {'PORTAIL': {'DUI': {'IDDUI': u'XXX'}}})]
1053

  
1054

  
1055
def test_sanitize_update_family_data_axel_error(app, resource, update_params):
1153
        new_values = partial_update_params['ENFANT'][0]['SANITAIRE']
1154
        for key in handicap_fields:
1155
            assert new_values[key] == family_data['ENFANT'][0]['SANITAIRE'][key]
1156

  
1157

  
1158
@pytest.mark.parametrize('flags', [
1159
    # get family data to fill handicap fields
1160
    ['maj:enfant_0_sanitaire_handicap', 'maj:revenus', 'maj:rl1', 'maj:rl2'],
1161
    # get family data to fill revenus fields
1162
    ['maj:rl1', 'maj:rl2'],
1163
    # get family data to fill rl1 fields
1164
    ['maj:revenus', 'maj:rl2'],
1165
    # get family data to fill rl2 fields
1166
    ['maj:revenus', 'maj:rl1'],
1167
])
1168
def test_sanitize_update_family_data_axel_error(app, resource, update_params, flags):
1056 1169
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
1057 1170

  
1058 1171
    partial_update_params = copy.deepcopy(update_params)
1059
    partial_update_params['maj:enfant_0_sanitaire_handicap'] = False
1172
    for flag in flags:
1173
        partial_update_params[flag] = False
1060 1174
    with mock.patch('passerelle.contrib.toulouse_axel.models.ref_famille_dui') as operation:
1061 1175
        operation.side_effect = AxelError('FooBar')
1062 1176
        with pytest.raises(APIError, match='Axel error: FooBar'):
1063
-