added RAG, Multiuser, TG bot
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import unittest
|
||||
|
||||
from app.fitness.activity_budget import (
|
||||
compute_activity_bonus,
|
||||
scale_targets,
|
||||
steps_bonus_kcal,
|
||||
)
|
||||
|
||||
|
||||
PROFILE = {
|
||||
"weight_kg": 70,
|
||||
"activity_level": "moderate",
|
||||
"weekly_workouts": 3,
|
||||
"calorie_target": 2000,
|
||||
"protein_g": 126,
|
||||
"fat_g": 56,
|
||||
"carbs_g": 250,
|
||||
"water_l": 2.5,
|
||||
}
|
||||
|
||||
|
||||
class ActivityBudgetTests(unittest.TestCase):
|
||||
def test_no_bonus_at_baseline(self) -> None:
|
||||
bonus = compute_activity_bonus(
|
||||
PROFILE,
|
||||
steps_total=9000,
|
||||
workouts=[{"active_calories": 85}],
|
||||
)
|
||||
self.assertEqual(bonus.steps_bonus_kcal, 0.0)
|
||||
self.assertEqual(bonus.workout_bonus_kcal, 0.0)
|
||||
self.assertEqual(bonus.total_bonus_kcal, 0.0)
|
||||
self.assertEqual(bonus.scale_factor, 1.0)
|
||||
|
||||
def test_steps_and_workout_bonus(self) -> None:
|
||||
bonus = compute_activity_bonus(
|
||||
PROFILE,
|
||||
steps_total=21800,
|
||||
workouts=[{"active_calories": 155}],
|
||||
)
|
||||
self.assertGreater(bonus.steps_bonus_kcal, 0)
|
||||
self.assertGreater(bonus.workout_bonus_kcal, 0)
|
||||
self.assertEqual(
|
||||
bonus.total_bonus_kcal,
|
||||
round(bonus.steps_bonus_kcal + bonus.workout_bonus_kcal, 1),
|
||||
)
|
||||
self.assertGreater(bonus.scale_factor, 1.0)
|
||||
|
||||
def test_steps_bonus_formula(self) -> None:
|
||||
kcal = steps_bonus_kcal(steps=21800, baseline_steps=9000, weight_kg=70)
|
||||
self.assertEqual(kcal, round(12800 * 70 * 0.0005, 1))
|
||||
|
||||
def test_proportional_macro_scale(self) -> None:
|
||||
base = {
|
||||
"calories": 2000,
|
||||
"protein_g": 100,
|
||||
"fat_g": 50,
|
||||
"carbs_g": 200,
|
||||
"water_ml": 2500,
|
||||
}
|
||||
effective, targets_base = scale_targets(base, 500)
|
||||
self.assertEqual(effective["calories"], 2500)
|
||||
self.assertEqual(targets_base, base)
|
||||
self.assertEqual(effective["water_ml"], 2500)
|
||||
ratio = effective["calories"] / base["calories"]
|
||||
self.assertAlmostEqual(effective["protein_g"] / base["protein_g"], ratio, places=1)
|
||||
self.assertAlmostEqual(effective["fat_g"] / base["fat_g"], ratio, places=1)
|
||||
self.assertAlmostEqual(effective["carbs_g"] / base["carbs_g"], ratio, places=1)
|
||||
|
||||
def test_floor_at_base_when_no_activity(self) -> None:
|
||||
effective, _ = scale_targets(
|
||||
{
|
||||
"calories": 2045,
|
||||
"protein_g": 156,
|
||||
"fat_g": 57,
|
||||
"carbs_g": 227,
|
||||
"water_ml": 2900,
|
||||
},
|
||||
0,
|
||||
)
|
||||
self.assertEqual(effective["calories"], 2045)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user