Projet

Général

Profil

0002-journal-add-user-profile-management-events-58554.patch

Paul Marillonnet, 07 février 2022 17:31

Télécharger (6,56 ko)

Voir les différences:

Subject: [PATCH 2/3] journal: add user profile management events (#58554)

 src/authentic2/journal_event_types.py | 57 +++++++++++++++++++++++++++
 tests/test_manager_journal.py         | 44 ++++++++++++++++++++-
 2 files changed, 99 insertions(+), 2 deletions(-)
src/authentic2/journal_event_types.py
378 378
        new_email = event.get_data('email')
379 379
        old_email = event.get_data('old_email')
380 380
        return _('email address changed from "{0}" to "{1}"').format(old_email, new_email)
381

  
382

  
383
class UserProfileAdd(EventTypeDefinition):
384
    name = 'user.profile.add'
385
    label = _('user profile creation')
386

  
387
    @classmethod
388
    def record(cls, user, profile_type, object_user, api=False):
389
        data = {
390
            'profile_type': profile_type.name or profile_type.slug,
391
            'object_user': object_user.get_full_name(),
392
        }
393
        super().record(user=user, data=data, api=api)
394

  
395
    @classmethod
396
    def get_message(cls, event, context):
397
        profile_type = event.get_data('profile_type')
398
        object_user = event.get_data('object_user')
399
        return _(f'profile of type "{profile_type}" created for user "{object_user}"')
400

  
401

  
402
class UserProfileUpdate(EventTypeDefinition):
403
    name = 'user.profile.update'
404
    label = _('user profile update')
405

  
406
    @classmethod
407
    def record(cls, user, profile_type, object_user, api=False):
408
        data = {
409
            'profile_type': profile_type.name or profile_type.slug,
410
            'object_user': object_user.get_full_name(),
411
        }
412
        super().record(user=user, data=data, api=api)
413

  
414
    @classmethod
415
    def get_message(cls, event, context):
416
        profile_type = event.get_data('profile_type')
417
        object_user = event.get_data('object_user')
418
        return _(f'profile of type "{profile_type}" updated for user "{object_user}"')
419

  
420

  
421
class UserProfileDelete(EventTypeDefinition):
422
    name = 'user.profile.delete'
423
    label = _('user profile deletion')
424

  
425
    @classmethod
426
    def record(cls, user, profile_type, object_user, api=False):
427
        data = {
428
            'profile_type': profile_type.name or profile_type.slug,
429
            'object_user': object_user.get_full_name(),
430
        }
431
        super().record(user=user, data=data, api=api)
432

  
433
    @classmethod
434
    def get_message(cls, event, context):
435
        profile_type = event.get_data('profile_type')
436
        object_user = event.get_data('object_user')
437
        return _(f'profile of type "{profile_type}" deleted for user "{object_user}"')
tests/test_manager_journal.py
24 24
from authentic2.a2_rbac.models import Role
25 25
from authentic2.a2_rbac.utils import get_default_ou
26 26
from authentic2.apps.journal.models import Event, _registry
27
from authentic2.custom_user.models import User
27
from authentic2.custom_user.models import ProfileType, User
28 28
from authentic2.journal import journal
29 29
from authentic2.models import Service
30 30

  
......
50 50
    user = User.objects.create(
51 51
        username="user", email="user@example.com", ou=ou, uuid="1" * 32, first_name='Johnny', last_name='doe'
52 52
    )
53
    profile_type = ProfileType.objects.create(name='One Type', slug='one-type')
53 54
    agent = User.objects.create(username="agent", email="agent@example.com", ou=ou, uuid="2" * 32)
54 55
    role_user = Role.objects.create(name="role1", ou=ou)
55 56
    role_agent = Role.objects.create(name="role2", ou=ou)
......
270 271
    make("user.service.sso.refusal", user=user, session=session1, service=service)
271 272
    make("user.service.sso.denial", user=user, session=session1, service=service)
272 273

  
274
    make(
275
        'user.profile.add',
276
        user=agent,
277
        profile_type=profile_type,
278
        object_user=user,
279
    )
280
    make(
281
        'user.profile.update',
282
        user=agent,
283
        profile_type=profile_type,
284
        object_user=user,
285
    )
286
    make(
287
        'user.profile.delete',
288
        user=agent,
289
        profile_type=profile_type,
290
        object_user=user,
291
    )
292

  
273 293
    # verify we created at least one event for each type
274 294
    assert set(Event.objects.values_list("type__name", flat=True)) == set(_registry)
275 295

  
......
598 618
            'type': 'user.service.sso.denial',
599 619
            'user': 'Johnny doe',
600 620
        },
621
        {
622
            'timestamp': 'Jan. 2, 2020, 10 p.m.',
623
            'type': 'user.profile.add',
624
            'user': 'agent',
625
            'message': 'profile of type "One Type" created for user "Johnny doe"',
626
        },
627
        {
628
            'timestamp': 'Jan. 2, 2020, 11 p.m.',
629
            'type': 'user.profile.update',
630
            'user': 'agent',
631
            'message': 'profile of type "One Type" updated for user "Johnny doe"',
632
        },
633
        {
634
            'timestamp': 'Jan. 3, 2020, midnight',
635
            'type': 'user.profile.delete',
636
            'user': 'agent',
637
            'message': 'profile of type "One Type" deleted for user "Johnny doe"',
638
        },
601 639
    ]
602 640

  
603 641
    agent_page = response.click('agent', index=1)
......
1097 1135

  
1098 1136
    table_content = [text_content(p) for p in response.pyquery('tbody td.journal-list--message-column')]
1099 1137
    assert table_content == [
1138
        'profile of type "One Type" deleted for user "Johnny doe"',
1139
        'profile of type "One Type" updated for user "Johnny doe"',
1140
        'profile of type "One Type" created for user "Johnny doe"',
1100 1141
        'automatic activation of user "Johnny doe" because the associated LDAP account reappeared',
1101 1142
        'automatic deactivation of user "Johnny doe" because the associated LDAP source has been deleted',
1102 1143
        'automatic deactivation of user "Johnny doe" because the associated LDAP account does not exist'
......
1115 1156
        'password reset request with email "user@example.com"',
1116 1157
        'user deletion',
1117 1158
        'profile edit (first name)',
1118
        'password change',
1119 1159
    ]
1120 1160

  
1121 1161
    response.form['event_type'].select(text='Role management')
1122
-