Projet

Général

Profil

0003-api_views-set-api-as-verification-source-for-custom-.patch

Paul Marillonnet, 05 décembre 2022 17:24

Télécharger (4,71 ko)

Voir les différences:

Subject: [PATCH 3/3] api_views: set api as verification source for custom
 attributes (#65612)

 src/authentic2/api_views.py | 27 +++++++++++++++------------
 tests/api/test_all.py       | 12 ++++++++++++
 2 files changed, 27 insertions(+), 12 deletions(-)
src/authentic2/api_views.py
415 415
        if not getattr(instance, '_a2_created', True):
416 416
            return instance
417 417
        for key, value in attributes.items():
418
            if is_verified.get(key):
419
                setattr(instance.verified_attributes, key, value)
420
            else:
421
                setattr(instance.attributes, key, value)
418
            verified = bool(is_verified.get(key))
419
            accessor = instance.verified_attributes if verified else instance.attributes
420
            accessor._set_sourced_attr(key, value, 'api')
421
        instance.refresh_from_db()
422 422
        if is_verified.get('first_name'):
423 423
            instance.verified_attributes.first_name = instance.first_name
424
            Attribute.add_verification_source(instance, 'first_name', instance.first_name, 'api')
424 425
        if is_verified.get('last_name'):
425 426
            instance.verified_attributes.last_name = instance.last_name
427
            Attribute.add_verification_source(instance, 'last_name', instance.last_name, 'api')
426 428
        if password is not None:
427 429
            instance.set_password(password)
428 430
        else:
......
470 472
            instance.set_email_verified(False)
471 473
        super().update(instance, validated_data)
472 474
        for key, value in attributes.items():
473
            if is_verified.get(key):
474
                setattr(instance.verified_attributes, key, value)
475
            else:
476
                setattr(instance.attributes, key, value)
475
            verified = bool(is_verified.get(key))
476
            accessor = instance.verified_attributes if verified else instance.attributes
477
            accessor._set_sourced_attr(key, value, 'api')
477 478
        for key in is_verified:
478 479
            if key not in attributes:
479
                if is_verified.get(key):
480
                    setattr(instance.verified_attributes, key, getattr(instance.attributes, key))
481
                else:
482
                    setattr(instance.attributes, key, getattr(instance.attributes, key))
480
                verified = bool(is_verified.get(key))
481
                accessor = instance.verified_attributes if verified else instance.attributes
482
                accessor._set_sourced_attr(key, getattr(instance.attributes, key), 'api')
483
        instance.refresh_from_db()
483 484
        if is_verified.get('first_name'):
484 485
            instance.verified_attributes.first_name = instance.first_name
486
            Attribute.add_verification_source(instance, 'first_name', instance.first_name, 'api')
485 487
        if is_verified.get('last_name'):
486 488
            instance.verified_attributes.last_name = instance.last_name
489
            Attribute.add_verification_source(instance, 'last_name', instance.last_name, 'api')
487 490
        if password is not None:
488 491
            instance.set_password(password)
489 492
            instance.save()
tests/api/test_all.py
568 568
        assert user.verified_attributes.first_name == 'John'
569 569
        assert user.verified_attributes.last_name == 'Doe'
570 570
        assert user.verified_attributes.title == 'Mr'
571
        first_name = Attribute.objects.get(name='first_name')
572
        last_name = Attribute.objects.get(name='last_name')
573
        title = Attribute.objects.get(name='title')
574
        first_name_value = AttributeValue.objects.with_owner(user).get(attribute=first_name)
575
        last_name_value = AttributeValue.objects.with_owner(user).get(attribute=last_name)
576
        title_value = AttributeValue.objects.with_owner(user).get(attribute=title)
577
        assert first_name_value.last_verified_on
578
        assert last_name_value.last_verified_on
579
        assert title_value.last_verified_on
580
        assert first_name_value.verification_sources == ['api']
581
        assert last_name_value.verification_sources == ['api']
582
        assert title_value.verification_sources == ['api']
571 583
        assert resp.json['first_name_verified']
572 584
        assert resp.json['last_name_verified']
573 585
        assert resp.json['title_verified']
574
-