Projet

Général

Profil

0002-misc-adapt-clean-unused-account-for-keepalive-67901.patch

Benjamin Dauvergne, 02 novembre 2022 14:22

Télécharger (3,9 ko)

Voir les différences:

Subject: [PATCH 2/7] misc: adapt clean-unused-account for keepalive (#67901)

 .../commands/clean-unused-accounts.py         | 12 +++--
 tests/test_commands.py                        | 45 +++++++++++++++++++
 2 files changed, 54 insertions(+), 3 deletions(-)
src/authentic2/management/commands/clean-unused-accounts.py
23 23
from django.contrib.auth import get_user_model
24 24
from django.core.management.base import BaseCommand
25 25
from django.db import transaction
26
from django.db.models import F
26
from django.db.models import F, Q
27 27
from django.utils import timezone, translation
28 28

  
29 29
from authentic2 import app_settings
......
87 87
            ou_users = self.user_qs.filter(ou=ou)
88 88

  
89 89
            # reset last_account_deletion_alert for users which connected since last alert
90
            active_users = ou_users.filter(last_login__gte=F('last_account_deletion_alert'))
90
            active_users = ou_users.filter(
91
                Q(last_login__gte=F('last_account_deletion_alert'))
92
                | Q(keepalive__gte=F('last_account_deletion_alert'))
93
            )
91 94
            active_users.update(last_account_deletion_alert=None)
92 95

  
93
            inactive_users = ou_users.filter(last_login__lte=self.now - alert_delay)
96
            inactive_users = ou_users.filter(
97
                Q(last_login__lte=self.now - alert_delay)
98
                & (Q(keepalive__isnull=True) | Q(keepalive__lte=self.now - alert_delay))
99
            )
94 100

  
95 101
            # send first alert
96 102
            inactive_users_first_alert = inactive_users.filter(last_account_deletion_alert__isnull=True)
tests/test_commands.py
138 138
    assert len(mailoutbox) == 2
139 139

  
140 140

  
141
def test_clean_unused_account_keepalive(app, db, simple_user, mailoutbox, freezer):
142
    freezer.move_to('2018-01-01')
143
    simple_user.ou.clean_unused_accounts_alert = 2
144
    simple_user.ou.clean_unused_accounts_deletion = 3
145
    simple_user.ou.save()
146

  
147
    simple_user.last_login = now() - datetime.timedelta(days=2)
148
    simple_user.keepalive = now()
149
    simple_user.save()
150

  
151
    call_command('clean-unused-accounts')
152
    assert len(mailoutbox) == 0
153

  
154

  
155
def test_clean_unused_account_keepalive_after_alert(app, db, simple_user, mailoutbox, freezer):
156
    freezer.move_to('2018-01-01')
157
    simple_user.ou.clean_unused_accounts_alert = 2
158
    simple_user.ou.clean_unused_accounts_deletion = 3
159
    simple_user.ou.save()
160

  
161
    simple_user.last_login = now() - datetime.timedelta(days=2)
162
    simple_user.save()
163

  
164
    call_command('clean-unused-accounts')
165
    assert len(mailoutbox) == 1
166

  
167
    login(app, simple_user)
168

  
169
    # the day of deletion, nothing happens
170
    freezer.move_to('2018-01-02')
171
    assert len(mailoutbox) == 1
172

  
173
    freezer.move_to('2018-01-03')
174
    # set keepalive
175
    simple_user.keepalive = now()
176
    simple_user.save()
177

  
178
    # when new alert delay is reached, no mail is sent and last_account_deletion_alert is reset
179
    freezer.move_to('2018-01-04')
180
    call_command('clean-unused-accounts')
181
    assert len(mailoutbox) == 1
182
    simple_user.refresh_from_db()
183
    assert simple_user.last_account_deletion_alert is None
184

  
185

  
141 186
def test_clean_unused_account_disabled_by_default(db, simple_user, mailoutbox):
142 187
    simple_user.last_login = now() - datetime.timedelta(days=2)
143 188
    simple_user.save()
144
-