|
21 | 21 |
|
22 | 22 | # wger |
23 | 23 | 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 |
24 | 29 |
|
25 | 30 |
|
26 | 31 | logger = logging.getLogger(__name__) |
@@ -196,3 +201,40 @@ def test_delete_user_anonymous(self): |
196 | 201 | Tests deleting the user account as an anonymous user |
197 | 202 | """ |
198 | 203 | 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