from django.contrib.auth.models import User from django.test import TestCase from exercise.models import Exercise from generator.models import UserPreference from generator.services.workout_generator import WorkoutGenerator from registered_user.models import RegisteredUser class TestRebalanceReplacementGuard(TestCase): def setUp(self): django_user = User.objects.create_user( username='rebalance_guard_user', password='testpass123', ) registered_user = RegisteredUser.objects.create( user=django_user, first_name='Rebalance', last_name='Guard', ) self.preference = UserPreference.objects.create( registered_user=registered_user, days_per_week=4, fitness_level=2, ) def test_pull_replacement_prefers_non_sided_candidates(self): sided_pull = Exercise.objects.create( name='Single Arm Cable Row', side='left_arm', movement_patterns='upper pull - horizontal, upper pull', muscle_groups='lats,upper back,biceps', is_reps=True, is_duration=False, is_weight=True, is_compound=False, difficulty_level='intermediate', ) unsided_pull = Exercise.objects.create( name='Chest Supported Row', side='', movement_patterns='upper pull - horizontal, upper pull', muscle_groups='lats,upper back,biceps', is_reps=True, is_duration=False, is_weight=True, is_compound=False, difficulty_level='intermediate', ) generator = WorkoutGenerator(self.preference) replacement = generator._select_pull_replacement( target_muscles=[], is_duration_based=False, prefer_weighted=False, ) self.assertIsNotNone(replacement) self.assertEqual(replacement.pk, unsided_pull.pk) self.assertNotEqual(replacement.pk, sided_pull.pk)