Skip to content

Commit ccb22e9

Browse files
committed
Add integration test for user deletion with trophy data per maintainer feedback
Implement Roland'\''s suggestion: create workout session records (logs), invoke trophy services, verify model delete succeeds without IntegrityError. Added logger statements. No mock in test_services.py needed to remove.
1 parent 134f339 commit ccb22e9

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

wger/core/tests/test_delete_user.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@
2121

2222
# wger
2323
from wger.core.tests.base_testcase import WgerTestCase
24+
from django.utils import timezone
25+
from wger.trophies.services.trophy import TrophyService
26+
from wger.trophies.services.statistics import UserStatisticsService
27+
from wger.trophies.models import Trophy, UserStatistics, UserTrophy
28+
from wger.manager.models import WorkoutSession
2429

2530

2631
logger = logging.getLogger(__name__)
@@ -196,3 +201,40 @@ def test_delete_user_anonymous(self):
196201
Tests deleting the user account as an anonymous user
197202
"""
198203
self.delete_user(fail=True)
204+
class UserDeleteTrophyIntegrationTestCase(WgerTestCase):
205+
"""
206+
Tests user deletion with trophy records and service invocation
207+
"""
208+
def test_delete_user_with_trophy_records(self):
209+
"""
210+
Adds sessions/records, calls trophy system, ensures delete works without IntegrityError
211+
"""
212+
logger.info("Testing user deletion after trophy system invocation")
213+
user = User.objects.create_user(
214+
username="trophyuser",
215+
email="trophy@test.com",
216+
password="testpass"
217+
)
218+
session = WorkoutSession.objects.create(
219+
user=user,
220+
date=timezone.now().date()
221+
)
222+
logger.info("Created WorkoutSession")
223+
trophy = Trophy.objects.create(
224+
name="DeleteTestTrophy",
225+
trophy_type=0,
226+
checker_class="workout_count_based",
227+
checker_params={"count": 1},
228+
is_active=True
229+
)
230+
stats = UserStatistics.objects.create(
231+
user=user,
232+
total_workouts=1
233+
)
234+
logger.info("Created Trophy and UserStatistics")
235+
UserStatisticsService.update_statistics(user)
236+
TrophyService.evaluate_all_trophies(user)
237+
logger.info("Trophy services invoked")
238+
user.delete()
239+
logger.info("User deleted")
240+
self.assertEqual(User.objects.filter(username="trophyuser").count(), 0)

0 commit comments

Comments
 (0)