Skip to content

Commit 3c8e0f1

Browse files
committed
Add stub implementation and test for bulk mail scrubbing
1 parent b6f74b2 commit 3c8e0f1

File tree

3 files changed

+49
-41
lines changed

3 files changed

+49
-41
lines changed

pycroft/lib/user_deletion.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,11 @@ def scrub_mail(session: Session, user: User, author: User):
164164
session.add(ScrubLog(scrubber="mail", info={"user_id": user.id}))
165165

166166

167+
def scrub_all_mails(session: Session, author: User):
168+
stmt, _ = scrubbable_mails(session)
169+
# TODO implement
170+
171+
167172
def scrubbable_hosts_stmt(year: int) -> Select[tuple[Host]]:
168173
"""All the hosts we can delete.
169174

tests/lib/scrubbing/conftest.py

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
from datetime import datetime
12
import pytest
23
from sqlalchemy.orm import Session
34

4-
from pycroft.model.user import PropertyGroup
5+
from pycroft.helpers.interval import closedopen
6+
from pycroft.model.config import Config
7+
from pycroft.model.user import PropertyGroup, User
58
from tests import factories as f
69

710

@@ -15,3 +18,37 @@ def group_do_not_archive(module_session: Session) -> PropertyGroup:
1518
@pytest.fixture(autouse=True)
1619
def freeze(freezer) -> None:
1720
freezer.move_to("2025-01-01")
21+
22+
23+
@pytest.fixture(scope="module")
24+
def user_archivable(module_session: Session, config: Config) -> User:
25+
# TODO: user wtih membership
26+
return f.UserFactory.create(
27+
registered_at=datetime(2020, 7, 1),
28+
with_membership=True,
29+
membership__active_during=closedopen(datetime(2020, 7, 1), datetime(2021, 11, 25)),
30+
membership__group=config.member_group,
31+
without_room=True,
32+
)
33+
34+
35+
@pytest.fixture(scope="module", autouse=True)
36+
def user_do_not_archive(
37+
module_session: Session, config: Config, group_do_not_archive: PropertyGroup
38+
) -> User:
39+
"""
40+
Create a user with a membership in a group that has the do-not-archive
41+
property.
42+
"""
43+
# TODO _very old_ membership, but also mem in a group
44+
user = f.UserFactory.create(
45+
registered_at=datetime(2020, 7, 1),
46+
with_membership=True,
47+
membership__active_during=closedopen(datetime(2020, 7, 1), datetime(2021, 11, 25)),
48+
membership__group=config.member_group,
49+
without_room=True,
50+
)
51+
f.MembershipFactory.create(
52+
user=user, group=group_do_not_archive, active_during=closedopen(datetime(2020, 7, 1), None)
53+
)
54+
return user
Lines changed: 6 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
# TODO archivable member
2-
from datetime import datetime
3-
41
import pytest
52
from sqlalchemy import select
63
from sqlalchemy.orm import Session
74

8-
from pycroft.helpers.interval import closedopen
9-
from pycroft.lib.user_deletion import scrub_mail, scrubbable_mails
10-
from pycroft.model.config import Config
5+
from pycroft.lib.user_deletion import scrub_all_mails, scrub_mail, scrubbable_mails
116
from pycroft.model.scrubbing import ScrubLog
12-
from pycroft.model.user import PropertyGroup, User
13-
from tests import factories as f
7+
from pycroft.model.user import User
148
from tests.assertions import assert_one
159

1610

@@ -40,35 +34,7 @@ def test_scrubbing_scrubs_mail(user_archivable: User, processor: User, session:
4034
)
4135

4236

43-
@pytest.fixture(scope="module")
44-
def user_archivable(module_session: Session, config: Config) -> User:
45-
# TODO: user wtih membership
46-
return f.UserFactory.create(
47-
registered_at=datetime(2020, 7, 1),
48-
with_membership=True,
49-
membership__active_during=closedopen(datetime(2020, 7, 1), datetime(2021, 11, 25)),
50-
membership__group=config.member_group,
51-
without_room=True,
52-
)
53-
54-
55-
@pytest.fixture(scope="module", autouse=True)
56-
def user_do_not_archive(
57-
module_session: Session, config: Config, group_do_not_archive: PropertyGroup
58-
) -> User:
59-
"""
60-
Create a user with a membership in a group that has the do-not-archive
61-
property.
62-
"""
63-
# TODO _very old_ membership, but also mem in a group
64-
user = f.UserFactory.create(
65-
registered_at=datetime(2020, 7, 1),
66-
with_membership=True,
67-
membership__active_during=closedopen(datetime(2020, 7, 1), datetime(2021, 11, 25)),
68-
membership__group=config.member_group,
69-
without_room=True,
70-
)
71-
f.MembershipFactory.create(
72-
user=user, group=group_do_not_archive, active_during=closedopen(datetime(2020, 7, 1), None)
73-
)
74-
return user
37+
def test_bulk_scrubbing_scrubs_mail(
38+
users_archivable: list[User], users_notarchivable: list[User], processor: User, session: Session
39+
):
40+
scrub_all_mails(session, author=processor)

0 commit comments

Comments
 (0)