Projet

Général

Profil

0005-toulouse_axel-pre_process-the-payload-before-schema-.patch

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

Télécharger (38 ko)

Voir les différences:

Subject: [PATCH 5/5] toulouse_axel: pre_process the payload, before schema
 validation (#38543)

because w.c.s. always sends all fields, event if all the structure is
empty.
example: all children will always be present in the payload, even if
maj:enfant_n flags are set to False
 passerelle/contrib/toulouse_axel/models.py |  90 ++++++++------
 passerelle/views.py                        |   3 +
 tests/test_toulouse_axel.py                | 136 ++++++++-------------
 3 files changed, 108 insertions(+), 121 deletions(-)
passerelle/contrib/toulouse_axel/models.py
508 508

  
509 509
        raise APIError('Child not found', err_code='not-found')
510 510

  
511
    def sanitize_update_family_data(self, name_id, post_data):
512
        family_data = None
511
    def pre_sanitize_update_family_data(self, post_data):
512
        # before json payload validation, check maj fields and remove empty blocks
513 513

  
514 514
        # transform ENFANT list to dict, where the key is the field IDPERSONNE
515
        # because children in post_date are maybe not in the same order than on Axel side
515
        # because children in post_data are maybe not in the same order than on Axel side
516 516
        children = {}
517 517
        children_by_index = {}
518 518
        for i, child in enumerate(post_data.get('ENFANT', [])):
......
525 525
        # sanitize post_data
526 526
        flags = sorted(self.UPDATE_FAMILY_FLAGS.keys())
527 527
        for flag in flags:
528
            flag_value = post_data.pop(flag)
528
            flag_value = post_data.get(flag)
529 529
            flag_value = encode_bool(flag_value)
530 530

  
531 531
            # no update for the related block
......
567 567
                for k in data[element_to_remove].keys():
568 568
                    data[element_to_remove][k] = None
569 569
            elif element_to_remove == 'HANDICAP':
570
                # get the correct child
571
                child_data = post_data['ENFANT'][elements[1]]
572
                child_id = child_data['IDPERSONNE']
573
                # get family info
574
                if family_data is None:
575
                    family_data = self.get_family_data(name_id)
576
                for child in family_data['ENFANT']:
577
                    # find the correct child in family info
578
                    if child['IDPERSONNE'] != child_id:
579
                        continue
580
                    # reset handicap related fields
581
                    handicap_fields = [
582
                        'AUTREDIFFICULTE',
583
                        'ECOLESPECIALISEE',
584
                        'INDICATEURAUXILIAIREVS',
585
                        'INDICATEURECOLE',
586
                        'INDICATEURHANDICAP',
587
                        'INDICATEURNOTIFMDPH',
588
                    ]
589
                    for key in handicap_fields:
590
                        child_data['SANITAIRE']['HANDICAP'][key] = child['SANITAIRE'][key]
591
                    break
570
                # will be filled in sanitize_update_family_data
571
                data[element_to_remove]['_to_reset'] = True
592 572
            elif element_to_remove in data:
593 573
                # remove block
594 574
                data.pop(element_to_remove)
595 575

  
596
        # transform HANDICAP block
597
        for child in post_data['ENFANT'].values():
576
        # transform ENFANT dict to a list back
577
        post_data['ENFANT'] = post_data['ENFANT'].values()
578

  
579
        # if ENFANT block is empty, remove it
580
        if not post_data['ENFANT']:
581
            post_data.pop('ENFANT')
582

  
583
    UPDATE_FAMILY_SCHEMA['pre_process'] = pre_sanitize_update_family_data
584

  
585
    def sanitize_update_family_data(self, name_id, post_data):
586
        family_data = None
587

  
588
        for i, child_data in enumerate(post_data.get('ENFANT', [])):
589
            child_id = child_data['IDPERSONNE']
590
            # check if HANDICAP fields are to be filled
591
            if 'SANITAIRE' not in child_data:
592
                continue
593
            if child_data['SANITAIRE']['HANDICAP'].get('_to_reset') is not True:
594
                continue
595
            # get family info
596
            if family_data is None:
597
                family_data = self.get_family_data(name_id)
598
            for orig_child in family_data['ENFANT']:
599
                # find the correct child in family info
600
                if orig_child['IDPERSONNE'] != child_id:
601
                    continue
602
                # reset handicap related fields
603
                handicap_fields = [
604
                    'AUTREDIFFICULTE',
605
                    'ECOLESPECIALISEE',
606
                    'INDICATEURAUXILIAIREVS',
607
                    'INDICATEURECOLE',
608
                    'INDICATEURHANDICAP',
609
                    'INDICATEURNOTIFMDPH',
610
                ]
611
                for key in handicap_fields:
612
                    child_data['SANITAIRE']['HANDICAP'][key] = orig_child['SANITAIRE'][key]
613

  
614
        for child in post_data.get('ENFANT', []):
598 615
            if 'SANITAIRE' not in child:
599 616
                continue
617

  
618
            # transform HANDICAP block
600 619
            child['SANITAIRE'].update(child['SANITAIRE'].pop('HANDICAP'))
601 620

  
602
        # transform ALLERGIE block
603
        for child in post_data['ENFANT'].values():
604
            if 'SANITAIRE' not in child:
605
                continue
606 621
            if 'ALLERGIE' not in child['SANITAIRE']:
607 622
                continue
623

  
624
            # transform ALLERGIE block
608 625
            new_allergie = []
609 626
            for key in ['ASTHME', 'MEDICAMENTEUSES', 'ALIMENTAIRES']:
610 627
                new_allergie.append({
......
637 654
                family_data = self.get_family_data(name_id)
638 655
            post_data['REVENUS']['NBENFANTSACHARGE'] = family_data.get('REVENUS', {}).get('NBENFANTSACHARGE')
639 656

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

  
643
        # if ENFANT block is empty, remove it
644
        if not post_data['ENFANT']:
645
            post_data.pop('ENFANT')
657
        # remove flags
658
        for flag in self.UPDATE_FAMILY_FLAGS.keys():
659
            post_data.pop(flag)
646 660

  
647 661
    @endpoint(
648 662
        description=_("Update information about user's family"),
passerelle/views.py
348 348
                json_schema = request_body['schema']['application/json']
349 349
                must_unflatten = hasattr(json_schema, 'items') and json_schema.get('unflatten', False)
350 350
                merge_extra = hasattr(json_schema, 'items') and json_schema.get('merge_extra', False)
351
                pre_process = hasattr(json_schema, 'items') and json_schema.get('pre_process')
351 352
                try:
352 353
                    data = json.loads(request.body)
353 354
                except ValueError as e:
......
356 357
                    data = unflatten(data)
357 358
                if merge_extra and hasattr(data, 'items'):
358 359
                    data.update(data.pop('extra', {}))
360
                if pre_process is not None:
361
                    pre_process(self.endpoint.im_self, data)
359 362
                try:
360 363
                    validate(data, json_schema)
361 364
                except ValidationError as e:
tests/test_toulouse_axel.py
687 687
    assert full_update_params['REVENUS']['NBENFANTSACHARGE'] is None
688 688

  
689 689

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

  
693 693
    # test maj:adresse
......
695 695
    partial_update_params['maj:adresse'] = False
696 696
    for key in partial_update_params['ADRESSE'].keys():
697 697
        partial_update_params['ADRESSE'][key] = None  # reset fields
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)
698
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
700 699
    for value in partial_update_params['ADRESSE'].values():
701 700
        assert value is None
702 701

  
703 702

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

  
707 706
    # test maj:revenus
......
709 708
    partial_update_params['maj:revenus'] = False
710 709
    for key in partial_update_params['REVENUS'].keys():
711 710
        partial_update_params['REVENUS'][key] = None  # reset fields
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)
711
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
714 712
    assert 'REVENUS' not in partial_update_params
715 713

  
716 714

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

  
720 718
    # test maj:rln
......
722 720
    partial_update_params['maj:rl1'] = False
723 721
    for key in partial_update_params['RL1'].keys():
724 722
        partial_update_params['RL1'][key] = None  # reset fields
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)
723
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
727 724
    assert 'RL1' not in partial_update_params
728 725
    partial_update_params = copy.deepcopy(update_params)
729 726
    partial_update_params['maj:rl2'] = False
730 727
    for key in partial_update_params['RL2'].keys():
731 728
        partial_update_params['RL2'][key] = None  # reset fields
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)
729
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
734 730
    assert 'RL2' not in partial_update_params
735 731

  
736 732

  
737
def test_sanitize_update_family_data_rln_adresse_employeur(app, resource, update_params, family_data):
733
def test_pre_sanitize_update_family_data_rln_adresse_employeur(app, resource, update_params):
738 734
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
739 735

  
740 736
    # test maj:rln_adresse_employeur
......
742 738
    partial_update_params['maj:rl1_adresse_employeur'] = False
743 739
    for key in partial_update_params['RL1']['ADREMPLOYEUR'].keys():
744 740
        partial_update_params['RL1']['ADREMPLOYEUR'][key] = None  # reset fields
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)
741
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
747 742
    assert 'ADREMPLOYEUR' not in partial_update_params['RL1']
748 743
    partial_update_params = copy.deepcopy(update_params)
749 744
    partial_update_params['maj:rl2_adresse_employeur'] = False
750 745
    for key in partial_update_params['RL2']['ADREMPLOYEUR'].keys():
751 746
        partial_update_params['RL2']['ADREMPLOYEUR'][key] = None  # reset fields
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)
747
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
754 748
    assert 'ADREMPLOYEUR' not in partial_update_params['RL2']
755 749
    # combine with maj:rln
756 750
    partial_update_params = copy.deepcopy(update_params)
757 751
    partial_update_params['maj:rl1'] = False
758 752
    partial_update_params['maj:rl1_adresse_employeur'] = False
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)
753
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
761 754
    assert 'RL1' not in partial_update_params
762 755
    partial_update_params = copy.deepcopy(update_params)
763 756
    partial_update_params['maj:rl2'] = False
764 757
    partial_update_params['maj:rl2_adresse_employeur'] = False
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)
758
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
767 759
    assert 'RL2' not in partial_update_params
768 760

  
769 761
    # test maj:rln_adresse_employeur not set
770 762
    for val in [None, '']:
771 763
        partial_update_params = copy.deepcopy(update_params)
772 764
        partial_update_params['maj:rl1_adresse_employeur'] = val
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)
765
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
775 766
        assert 'ADREMPLOYEUR' not in partial_update_params['RL1']
776 767
        partial_update_params = copy.deepcopy(update_params)
777 768
        partial_update_params['maj:rl2_adresse_employeur'] = val
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)
769
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
780 770
        assert 'ADREMPLOYEUR' not in partial_update_params['RL2']
781 771

  
782 772

  
783
def test_sanitize_update_family_data_enfant_n(app, resource, update_params, family_data):
773
def test_pre_sanitize_update_family_data_enfant_n(app, resource, update_params):
784 774
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
785 775

  
786 776
    # test maj:enfant_n
......
790 780
        if key == 'IDPERSONNE':
791 781
            continue
792 782
        partial_update_params['ENFANT'][0][key] = None  # reset fields
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)
783
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
795 784
    assert len(partial_update_params['ENFANT']) == 1
796 785
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
797 786

  
......
801 790
        if key == 'IDPERSONNE':
802 791
            continue
803 792
        partial_update_params['ENFANT'][1][key] = None  # reset fields
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)
793
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
806 794
    assert len(partial_update_params['ENFANT']) == 1
807 795
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
808 796

  
......
811 799
    partial_update_params['maj:enfant_1'] = False
812 800
    for key in partial_update_params['ENFANT'][1].keys():
813 801
        partial_update_params['ENFANT'][1][key] = None  # reset fields
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)
802
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
816 803
    assert len(partial_update_params['ENFANT']) == 1
817 804
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
818 805

  
......
820 807
    partial_update_params = copy.deepcopy(update_params)
821 808
    partial_update_params['maj:enfant_0'] = False
822 809
    partial_update_params['maj:enfant_1'] = False
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)
810
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
825 811
    assert 'ENFANT' not in partial_update_params
826 812

  
827 813
    # unknown child
828 814
    partial_update_params = copy.deepcopy(update_params)
829 815
    partial_update_params['maj:enfant_5'] = False
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)
816
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
832 817
    assert len(partial_update_params['ENFANT']) == 2
833 818

  
834 819

  
835
def test_sanitize_update_family_data_enfant_n_assurance(app, resource, update_params, family_data):
820
def test_pre_sanitize_update_family_data_enfant_n_assurance(app, resource, update_params):
836 821
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
837 822

  
838 823
    # test maj:enfant_n_assurance
......
841 826
    for key in partial_update_params['ENFANT'][1]['ASSURANCE'].keys():
842 827
        partial_update_params['ENFANT'][1]['ASSURANCE'][key] = None  # reset fields
843 828
    partial_update_params['maj:enfant_0'] = False  # check that ordering is not a problem
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)
829
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
846 830
    assert len(partial_update_params['ENFANT']) == 1
847 831
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
848 832
    assert 'ASSURANCE' not in partial_update_params['ENFANT'][0]
......
851 835
    partial_update_params['maj:enfant_1'] = False
852 836
    partial_update_params['maj:enfant_1_assurance'] = False
853 837
    partial_update_params['maj:enfant_0'] = False
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)
838
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
856 839
    assert 'ENFANT' not in partial_update_params
857 840

  
858 841
    # test maj:enfant_n_assurance not set
......
860 843
        partial_update_params = copy.deepcopy(update_params)
861 844
        partial_update_params['maj:enfant_1_assurance'] = val
862 845
        partial_update_params['maj:enfant_0'] = False
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)
846
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
865 847
        assert 'ASSURANCE' not in partial_update_params['ENFANT'][0]
866 848

  
867 849

  
868
def test_sanitize_update_family_data_enfant_n_contact(app, resource, update_params, family_data):
850
def test_pre_sanitize_update_family_data_enfant_n_contact(app, resource, update_params):
869 851
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
870 852

  
871 853
    # test maj:enfant_n_contact
......
875 857
        for key in contact.keys():
876 858
            partial_update_params['ENFANT'][0]['CONTACT'][i][key] = None  # reset fields
877 859
    partial_update_params['maj:enfant_1'] = False
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)
860
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
880 861
    assert len(partial_update_params['ENFANT']) == 1
881 862
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "4242"
882 863
    assert 'CONTACT' not in partial_update_params['ENFANT'][0]
......
885 866
    partial_update_params['maj:enfant_1'] = False
886 867
    partial_update_params['maj:enfant_1_contact'] = False
887 868
    partial_update_params['maj:enfant_0'] = False
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)
869
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
890 870
    assert 'ENFANT' not in partial_update_params
891 871

  
892 872
    # test maj:enfant_n_contact not set
......
894 874
        partial_update_params = copy.deepcopy(update_params)
895 875
        partial_update_params['maj:enfant_0_contact'] = val
896 876
        partial_update_params['maj:enfant_1'] = False
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)
877
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
899 878
        assert 'CONTACT' not in partial_update_params['ENFANT'][0]
900 879

  
901 880

  
902
def test_sanitize_update_family_data_enfant_n_sanitaire(app, resource, update_params, family_data):
881
def test_pre_sanitize_update_family_data_enfant_n_sanitaire(app, resource, update_params):
903 882
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
904 883

  
905 884
    # test maj:enfant_n_sanitaire
......
908 887
    for key in partial_update_params['ENFANT'][1]['SANITAIRE'].keys():
909 888
        partial_update_params['ENFANT'][1]['SANITAIRE'][key] = None  # reset fields
910 889
    partial_update_params['maj:enfant_0'] = False
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)
890
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
913 891
    assert len(partial_update_params['ENFANT']) == 1
914 892
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
915 893
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
918 896
    partial_update_params['maj:enfant_1'] = False
919 897
    partial_update_params['maj:enfant_1_sanitaire'] = False
920 898
    partial_update_params['maj:enfant_0'] = False
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)
899
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
923 900
    assert 'ENFANT' not in partial_update_params
924 901

  
925 902
    # test maj:enfant_n_sanitaire not set
......
927 904
        partial_update_params = copy.deepcopy(update_params)
928 905
        partial_update_params['maj:enfant_0_sanitaire'] = val
929 906
        partial_update_params['maj:enfant_1_sanitaire'] = val
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)
907
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
932 908
        assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
933 909
        assert 'SANITAIRE' not in partial_update_params['ENFANT'][1]
934 910

  
935 911

  
936
def test_sanitize_update_family_data_enfant_n_sanitaire_allergie(app, resource, update_params, family_data):
912
def test_pre_sanitize_update_family_data_enfant_n_sanitaire_allergie(app, resource, update_params):
937 913
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
938 914

  
939 915
    # test maj:enfant_n_sanitaire_allergie
......
942 918
    for key in partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'].keys():
943 919
        partial_update_params['ENFANT'][0]['SANITAIRE']['ALLERGIE'][key] = None  # reset fields
944 920
    partial_update_params['maj:enfant_0'] = False
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)
921
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
947 922
    assert len(partial_update_params['ENFANT']) == 1
948 923
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
949 924
    assert 'ALLERGIE' not in partial_update_params['ENFANT'][0]['SANITAIRE']
......
952 927
    partial_update_params['maj:enfant_1_sanitaire'] = False
953 928
    partial_update_params['maj:enfant_1_sanitaire_allergie'] = False
954 929
    partial_update_params['maj:enfant_0'] = False
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)
930
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
957 931
    assert len(partial_update_params['ENFANT']) == 1
958 932
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
959 933
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
962 936
    partial_update_params['maj:enfant_1'] = False
963 937
    partial_update_params['maj:enfant_1_sanitaire_allergie'] = False
964 938
    partial_update_params['maj:enfant_0'] = False
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)
939
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
967 940
    assert 'ENFANT' not in partial_update_params
968 941

  
969 942
    # test maj:enfant_n_sanitaire_allergie not set
......
971 944
        partial_update_params = copy.deepcopy(update_params)
972 945
        partial_update_params['maj:enfant_0_sanitaire_allergie'] = val
973 946
        partial_update_params['maj:enfant_1_sanitaire_allergie'] = val
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)
947
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
976 948
        assert 'ALLERGIE' not in partial_update_params['ENFANT'][0]['SANITAIRE']
977 949
        assert 'ALLERGIE' not in partial_update_params['ENFANT'][1]['SANITAIRE']
978 950

  
951

  
952
def test_sanitize_update_family_data_enfant_n_sanitaire_allergie(app, resource, update_params, family_data):
979 953
    # check values
980 954
    partial_update_params = copy.deepcopy(update_params)
981 955
    partial_update_params['maj:enfant_1'] = False
......
1007 981
    ]
1008 982

  
1009 983

  
1010
def test_sanitize_update_family_data_enfant_n_sanitaire_medecin(app, resource, update_params, family_data):
984
def test_pre_sanitize_update_family_data_enfant_n_sanitaire_medecin(app, resource, update_params):
1011 985
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
1012 986

  
1013 987
    # test maj:enfant_n_sanitaire_medecin
......
1016 990
    for key in partial_update_params['ENFANT'][1]['SANITAIRE']['MEDECIN'].keys():
1017 991
        partial_update_params['ENFANT'][1]['SANITAIRE']['MEDECIN'][key] = None  # reset fields
1018 992
    partial_update_params['maj:enfant_0'] = False
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)
993
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1021 994
    assert len(partial_update_params['ENFANT']) == 1
1022 995
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
1023 996
    assert 'MEDECIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
......
1026 999
    partial_update_params['maj:enfant_1_sanitaire'] = False
1027 1000
    partial_update_params['maj:enfant_1_sanitaire_medecin'] = False
1028 1001
    partial_update_params['maj:enfant_0'] = False
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)
1002
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1031 1003
    assert len(partial_update_params['ENFANT']) == 1
1032 1004
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
1033 1005
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
1036 1008
    partial_update_params['maj:enfant_1'] = False
1037 1009
    partial_update_params['maj:enfant_1_sanitaire_medecin'] = False
1038 1010
    partial_update_params['maj:enfant_0'] = False
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)
1011
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1041 1012
    assert 'ENFANT' not in partial_update_params
1042 1013

  
1043 1014
    # test maj:enfant_n_sanitaire_medecin not set
......
1045 1016
        partial_update_params = copy.deepcopy(update_params)
1046 1017
        partial_update_params['maj:enfant_0_sanitaire_medecin'] = val
1047 1018
        partial_update_params['maj:enfant_1_sanitaire_medecin'] = val
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)
1019
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1050 1020
        assert 'MEDECIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
1051 1021
        assert 'MEDECIN' not in partial_update_params['ENFANT'][1]['SANITAIRE']
1052 1022

  
1053 1023

  
1054
def test_sanitize_update_family_data_enfant_n_sanitaire_vaccin(app, resource, update_params, family_data):
1024
def test_pre_sanitize_update_family_data_enfant_n_sanitaire_vaccin(app, resource, update_params):
1055 1025
    Link.objects.create(resource=resource, name_id='yyy', dui='XXX', person_id='42')
1056 1026

  
1057 1027
    # test maj:enfant_n_sanitaire_vaccin
......
1060 1030
    for key in partial_update_params['ENFANT'][1]['SANITAIRE']['VACCIN'].keys():
1061 1031
        partial_update_params['ENFANT'][1]['SANITAIRE']['VACCIN'][key] = None  # reset fields
1062 1032
    partial_update_params['maj:enfant_0'] = False
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)
1033
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1065 1034
    assert len(partial_update_params['ENFANT']) == 1
1066 1035
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
1067 1036
    assert 'VACCIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
......
1070 1039
    partial_update_params['maj:enfant_1_sanitaire'] = False
1071 1040
    partial_update_params['maj:enfant_1_sanitaire_vaccin'] = False
1072 1041
    partial_update_params['maj:enfant_0'] = False
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)
1042
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1075 1043
    assert len(partial_update_params['ENFANT']) == 1
1076 1044
    assert partial_update_params['ENFANT'][0]['IDPERSONNE'] == "3535"
1077 1045
    assert 'SANITAIRE' not in partial_update_params['ENFANT'][0]
......
1080 1048
    partial_update_params['maj:enfant_1'] = False
1081 1049
    partial_update_params['maj:enfant_1_sanitaire_vaccin'] = False
1082 1050
    partial_update_params['maj:enfant_0'] = False
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)
1051
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1085 1052
    assert 'ENFANT' not in partial_update_params
1086 1053

  
1087 1054
    # test maj:enfant_n_sanitaire_vaccin not set
......
1089 1056
        partial_update_params = copy.deepcopy(update_params)
1090 1057
        partial_update_params['maj:enfant_0_sanitaire_vaccin'] = val
1091 1058
        partial_update_params['maj:enfant_1_sanitaire_vaccin'] = val
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)
1059
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1094 1060
        assert 'VACCIN' not in partial_update_params['ENFANT'][0]['SANITAIRE']
1095 1061
        assert 'VACCIN' not in partial_update_params['ENFANT'][1]['SANITAIRE']
1096 1062

  
......
1113 1079
    for key in handicap_fields:
1114 1080
        partial_update_params['ENFANT'][0]['SANITAIRE']['HANDICAP'][key] = None
1115 1081
    partial_update_params['maj:enfant_1'] = False
1082
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1116 1083
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1117 1084
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1118 1085
    assert len(partial_update_params['ENFANT']) == 1
......
1126 1093
    partial_update_params['maj:enfant_1_sanitaire'] = False
1127 1094
    partial_update_params['maj:enfant_1_sanitaire_handicap'] = False
1128 1095
    partial_update_params['maj:enfant_0'] = False
1096
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1129 1097
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1130 1098
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1131 1099
    assert len(partial_update_params['ENFANT']) == 1
......
1136 1104
    partial_update_params['maj:enfant_1'] = False
1137 1105
    partial_update_params['maj:enfant_1_sanitaire_sanitaire'] = False
1138 1106
    partial_update_params['maj:enfant_0'] = False
1107
    resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1139 1108
    with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1140 1109
        resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1141 1110
    assert 'ENFANT' not in partial_update_params
......
1148 1117
        # reset fields
1149 1118
        for key in handicap_fields:
1150 1119
            partial_update_params['ENFANT'][0]['SANITAIRE']['HANDICAP'][key] = None
1120
        resource.pre_sanitize_update_family_data(post_data=partial_update_params)
1151 1121
        with mock.patch('passerelle.contrib.toulouse_axel.models.ToulouseAxel.get_family_data', return_value=family_data):
1152 1122
            resource.sanitize_update_family_data(name_id='yyy', post_data=partial_update_params)
1153 1123
        new_values = partial_update_params['ENFANT'][0]['SANITAIRE']
1154
-