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.exercise_selector import ExerciseSelector from registered_user.models import RegisteredUser class TestModalityGuardrails(TestCase): def setUp(self): django_user = User.objects.create_user( username='modality_guardrails_user', password='testpass123', ) registered_user = RegisteredUser.objects.create( user=django_user, first_name='Modality', last_name='Guardrails', ) self.preference = UserPreference.objects.create( registered_user=registered_user, days_per_week=4, fitness_level=2, ) def test_rep_mode_excludes_duration_only_exercises(self): duration_only = Exercise.objects.create( name="Dumbbell Waiter's Carry", movement_patterns='core,core - carry', muscle_groups='core,deltoids,upper back', equipment_required='Dumbbell', is_weight=True, is_duration=True, is_reps=False, is_compound=True, exercise_tier='secondary', difficulty_level='intermediate', complexity_rating=3, ) reps_ex = Exercise.objects.create( name='2 Kettlebell Clean and Press', movement_patterns='upper push - vertical, upper push, lower pull', muscle_groups='deltoids,triceps,glutes', equipment_required='Kettlebell', is_weight=True, is_duration=False, is_reps=True, is_compound=True, exercise_tier='secondary', difficulty_level='intermediate', complexity_rating=3, ) selector = ExerciseSelector(self.preference) picked = selector.select_exercises( muscle_groups=[], count=2, is_duration_based=False, ) picked_ids = {e.pk for e in picked} self.assertIn(reps_ex.pk, picked_ids) self.assertNotIn(duration_only.pk, picked_ids) def test_working_selection_excludes_static_stretch_patterns(self): static_stretch = Exercise.objects.create( name='Supine Pec Stretch - T', movement_patterns='mobility - static, static stretch, cool down', muscle_groups='chest,shoulders', equipment_required='None', is_weight=False, is_duration=True, is_reps=False, is_compound=False, exercise_tier='accessory', difficulty_level='beginner', complexity_rating=1, ) valid_reps = Exercise.objects.create( name='Barbell Clean Pull', movement_patterns='upper pull,hip hinge', muscle_groups='upper back,hamstrings,glutes', equipment_required='Barbell', is_weight=True, is_duration=False, is_reps=True, is_compound=True, exercise_tier='primary', difficulty_level='intermediate', complexity_rating=3, ) selector = ExerciseSelector(self.preference) picked = selector.select_exercises( muscle_groups=[], count=2, is_duration_based=False, ) picked_ids = {e.pk for e in picked} self.assertIn(valid_reps.pk, picked_ids) self.assertNotIn(static_stretch.pk, picked_ids)