/ BalanceKitTests / UserProfileTests.swift
UserProfileTests.swift
 1  //
 2  //  UserProfileTests.swift
 3  //  BalanceKitTests
 4  //
 5  //  Created by Alexander Kunau on 13.12.25.
 6  //
 7  
 8  import XCTest
 9  @testable import BalanceKit
10  
11  final class UserProfileTests: XCTestCase {
12      var sut: UserProfile!
13      
14      override func setUp() {
15          super.setUp()
16          sut = UserProfile()
17      }
18      
19      override func tearDown() {
20          sut = nil
21          super.tearDown()
22      }
23      
24      func testBMRCalculationMale() {
25          sut.gender = .male
26          sut.weight = 80
27          sut.height = 180
28          sut.age = 30
29          
30          let expected = 66 + (13.7 * 80) + (5 * 180) - (6.8 * 30)
31          XCTAssertEqual(sut.basalMetabolicRate, expected, accuracy: 0.1)
32      }
33      
34      func testBMRCalculationFemale() {
35          sut.gender = .female
36          sut.weight = 65
37          sut.height = 165
38          sut.age = 25
39          
40          let expected = 655 + (9.6 * 65) + (1.8 * 165) - (4.7 * 25)
41          XCTAssertEqual(sut.basalMetabolicRate, expected, accuracy: 0.1)
42      }
43      
44      func testDailyCalorieNeedsWithWeightLoss() {
45          sut.gender = .male
46          sut.weight = 80
47          sut.height = 180
48          sut.age = 30
49          sut.activityLevel = .lightlyActive
50          sut.weightGoal = .lose
51          
52          let bmr = sut.basalMetabolicRate
53          let expected = Int(bmr * 1.375 * 0.8)
54          XCTAssertEqual(sut.dailyCalorieNeeds, expected)
55      }
56      
57      func testDailyCalorieNeedsWithWeightGain() {
58          sut.gender = .female
59          sut.weight = 60
60          sut.height = 170
61          sut.age = 28
62          sut.activityLevel = .moderatelyActive
63          sut.weightGoal = .gain
64          
65          let bmr = sut.basalMetabolicRate
66          let expected = Int(bmr * 1.55 * 1.1)
67          XCTAssertEqual(sut.dailyCalorieNeeds, expected)
68      }
69      
70      func testRecommendedMacros() {
71          sut.gender = .male
72          sut.weight = 75
73          sut.height = 175
74          sut.age = 30
75          sut.activityLevel = .lightlyActive
76          sut.weightGoal = .maintain
77          
78          let macros = sut.recommendedMacros
79          
80          let totalCalories = Double(sut.dailyCalorieNeeds)
81          let proteinCalories = totalCalories * 0.3
82          let carbsCalories = totalCalories * 0.45
83          let fatCalories = totalCalories * 0.25
84          
85          XCTAssertEqual(macros.protein, proteinCalories / 4, accuracy: 0.1)
86          XCTAssertEqual(macros.carbs, carbsCalories / 4, accuracy: 0.1)
87          XCTAssertEqual(macros.fat, fatCalories / 9, accuracy: 0.1)
88      }
89  }