Projet

Général

Profil

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

Benjamin Dauvergne, 10 octobre 2022 10:37

Télécharger (3,9 ko)

Voir les différences:

Subject: [PATCH 2/6] 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
131 131
    assert len(mailoutbox) == 2
132 132

  
133 133

  
134
def test_clean_unused_account_keepalive(app, db, simple_user, mailoutbox, freezer):
135
    freezer.move_to('2018-01-01')
136
    simple_user.ou.clean_unused_accounts_alert = 2
137
    simple_user.ou.clean_unused_accounts_deletion = 3
138
    simple_user.ou.save()
139

  
140
    simple_user.last_login = now() - datetime.timedelta(days=2)
141
    simple_user.keepalive = now()
142
    simple_user.save()
143

  
144
    call_command('clean-unused-accounts')
145
    assert len(mailoutbox) == 0
146

  
147

  
148
def test_clean_unused_account_keepalive_after_alert(app, db, simple_user, mailoutbox, freezer):
149
    freezer.move_to('2018-01-01')
150
    simple_user.ou.clean_unused_accounts_alert = 2
151
    simple_user.ou.clean_unused_accounts_deletion = 3
152
    simple_user.ou.save()
153

  
154
    simple_user.last_login = now() - datetime.timedelta(days=2)
155
    simple_user.save()
156

  
157
    call_command('clean-unused-accounts')
158
    assert len(mailoutbox) == 1
159

  
160
    login(app, simple_user)
161

  
162
    # the day of deletion, nothing happens
163
    freezer.move_to('2018-01-02')
164
    assert len(mailoutbox) == 1
165

  
166
    freezer.move_to('2018-01-03')
167
    # set keepalive
168
    simple_user.keepalive = now()
169
    simple_user.save()
170

  
171
    # when new alert delay is reached, no mail is sent and last_account_deletion_alert is reset
172
    freezer.move_to('2018-01-04')
173
    call_command('clean-unused-accounts')
174
    assert len(mailoutbox) == 1
175
    simple_user.refresh_from_db()
176
    assert simple_user.last_account_deletion_alert is None
177

  
178

  
134 179
def test_clean_unused_account_disabled_by_default(db, simple_user, mailoutbox):
135 180
    simple_user.last_login = now() - datetime.timedelta(days=2)
136 181
    simple_user.save()
137
-