/ 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 }