Unit tests
Swift unit tests are done with Swift's XCTest
Pico-W testing is done with pytest library
Front End
Pet Page
HandleFoodUse()
Health increases after eating food
- Test user is feeding their pets food
- Input/User action
- User clicks on food button to feed pet
- Expected Result
- handleFoodUse(selectedFoodIndex: Int) is called, health bar should increase
- Input/User action
Food quantity decreases after eating food
- Test user is feeding their pets food
- Input/User action
- User clicks on food button to feed pet
- Expected Result
- handleFoodUse(selectedFoodIndex: Int) is called, food quantity should decrease
- Input/User action
Health should not exceed after eating food
- Test user is feeding their pet with the pet's health bar full
- Input/User action
- User clicks on food button to feed pet
- Expected Result
- handleFoodUse(selectedFoodIndex: Int) is called, health bar bar should not exceed full
- Input/User action
Alert users of insufficient amount of food
- Test user is feeding their pets with insufficient amount of food
- Input/User action
- User clicks on food button to feed pet
- Expected Result
- handleFoodUse(selectedFoodIndex: Int) is called, an alert pops up telling the user they have no more food
- Input/User action
Alert users that health is at max
- Test user is feeding their pets the health already full
- Input/User action
- User clicks on food button to feed pet
- Expected Result
- handleFoodUse(selectedFoodIndex: Int) is called, an alert pops up telling the user that the health bar is already full
- Input/User action
WorkoutViewModel
testIsInputZeroOrInvalid()
Validates whether input values are zero or invalid
- User inputs values for sets, reps, weights, and countdown
- Input/User action
- User enters input values
- Expected Result
- The function correctly identifies whether the input values are zero or invalid.
- Input/User action
testIsValidInput()
Validates the validity of input values
- User inputs values for sets, reps, weights, and countdown
- Input/User action
- User enters input values
- Expected Result
- The function correctly identifies whether the input values are valid.
- Input/User action
testStringToInt()
Validates the conversion of string to integer
- User inputs a string value
- Input/User action
- User enters a string value
- Expected Result
- The function correctly converts the string to an integer if possible; otherwise, returns nil.
- Input/User action
testResetWorkoutState()
Validates the reset of workout state
- User resets the workout state
- Input/User action
- User initiates a new workout
- Expected Result
- The workout state variables are reset to their initial values.
- Input/User action
testStartWorkout()
Validates the start of workout
- User starts a workout session
- Input/User action
- User initiates the start of a workout session
- Expected Result
- The workout state is updated to indicate that the workout has started.
- Input/User action
testNextSet()
Validates the transition to the next set
- User progresses to the next set during a workout session
- Input/User action
- User initiates the transition to the next set
- Expected Result
- The workout state and relevant variables are updated accordingly for the next set.
- Input/User action
testResetTimer()
Validates the reset of timer
- User resets the timer during a workout session
- Input/User action
- User initiates a new workout
- Expected Result
- The timer variables are reset, and the timer is deactivated.
- Input/User action
Pet Store Page
testSortItemsByPrice()
- Test sorting items by price
- Input/User action
- Call
sortItems
withsortByPrice: true
- Call
- Expected Result
- Items should be sorted by price in ascending order
- Input/User action
testSortItemsbyName()
- Test sorting items by name
- Input/User action
- Call
sortItems
withsortByPrice: false
- Call
- Expected Result
- Items should be sorted by name in alphabetical order
- Input/User action
testSubtractFunds()
- Test subtracting funds
- Input/User action
- Subtract funds using
subtractFunds(price: 100)
- Subtract funds using
- Expected Result
viewModel.userCur
should decrease by100
- Input/User action
testPurchaseItem()
- Test purchasing an item
- Input/User action
- Purchase an item using
purchaseItem(item: item)
- Purchase an item using
- Expected Result
- The item should be marked as bought
viewModel.userCur
should decrease by the item's price
- Input/User action
testAddFunds()
- Test adding funds to user currency
- Input/User action
- Add funds using
addFundtoUser(price: 100)
- Add funds using
- Expected Result
viewModel.userCur
should increase by100
- Input/User action
FormCriteria
getRandomGoodFormPhrase()
The user gets one of three phrases when having good form
- User finishes a workout and wants their feedback
- Input/User action
- User clicks 'finish set' or 'finish workout'
- Expected Result
- getRandomGoodFormPhrase() is called and the user sees one of the three phrases
- Input/User action
updateWorkoutAnalysis()
updates the workout analysis data with provided current data
- User completes a workout session and wants to see the results
- Input/User action
- User finishes a workout session
- Expected Result
- The workout analysis is updated with the provided data and contains the expected keys.
- Input/User action
averageUpDownAcceleration()
Calculate of average up-down acceleration
- User wants to ensure accurate calculation of up-down acceleration average
- Input/User action
- User performs several sets of exercises
- Expected Result
- The calculated average up-down acceleration falls within the range of 0 to 1.
- Input/User action
averageWristLeftRightRotation()
Calculates average wrist left-right rotation
- User wants to ensure accurate calculation of left-right wrist rotation average
- Input/User action
- User performs several sets of exercises
- Expected Result
- The calculated average wrist left-right rotation falls within the range of 0 to 1.
- Input/User action
overallWorkoutUpDownAverage()
calculates overall workout up-down average
- User wants to ensure accurate calculation of overall workout up-down average
- Input/User action
- User completes a workout session
- Expected Result
- The calculated overall workout up-down average falls within the range of 0 to 1 and is approximately equal to the expected value.
- Input/User action
averageElbowSwing()
calculates average elbow swing
- User wants to ensure accurate calculation of elbow swing average
- Input/User action
- User performs several sets of exercises
- Expected Result
- The calculated average elbow swing falls within the range of 0 to 1.
- Input/User action
averageElbowFlareForwardBackward()
calculates average elbow flare forward-backward
- User wants to ensure accurate calculation of elbow flare forward-backward average
- Input/User action
- User performs several sets of exercises
- Expected Result
- The calculated average elbow flare forward-backward falls within the range of 0 to 1.
- Input/User action
overallWorkoutElbowSwing()
calculates overall workout elbow swing
- User wants to ensure accurate calculation of overall workout elbow swing
- Input/User action
- User completes a workout session
- Expected Result
- The calculated overall workout elbow swing falls within the range of 0 to 1 and is approximately equal to the expected value.
- Input/User action
dangerousForm()
Detects of dangerous form
- User wants to ensure accurate detection of dangerous form based on provided data
- Input/User action
- User performs exercises with varying data
- Expected Result
- The function correctly identifies whether the provided data indicates dangerous form.
- Input/User action
giveFeedback()
generation of feedback
- User wants to ensure accurate generation of feedback based on provided data
- Input/User action
- User completes an exercise session
- Expected Result
- The feedback generated for acceleration and elbow swing is formatted correctly, and the custom text feedback for elbow is correct.
- Input/User action
Database Integration
CloudKit DB Tests
CloudKitManager Tests
Unit Tests for the CloudKitManager class
-
testCreateUser()
- Tests the creation of a new user in the database.
- Expected Result:
userExists
should betrue
after creating a user successfully.
-
testFetchUser()
- Tests the fetching of user data from the database.
- Expected Result:
- The fetched user data (
user
) should not benil
, and there should be noerror
.
- The fetched user data (
-
testGetCurrency()
- Tests the retrieval of the currency value associated with the user.
- Expected Result:
- The retrieved currency value (
currency
) should not benil
, and there should be noerror
.
- The retrieved currency value (
-
testUpdateCurrency()
- Tests the updating of the currency value associated with the user.
- Expected Result:
- There should be no
error
after updating the currency value.
- There should be no
-
testGetName()
- Tests the retrieval of the full name of the user.
- Expected Result:
- The retrieved name (
name
) should not benil
, and there should be noerror
.
- The retrieved name (
-
testUpdateName()
- Tests the updating of the first name and/or last name of the user.
- Expected Result:
- There should be no
error
after updating the name.
- There should be no
BackgroundItemDBManager Tests
Unit Tests for the BackgroundItemDBManager class
-
testFetchBackgroundItems()
- Tests the fetching of background items from the database.
- Expected Result:
- There should be no error while fetching background items.
- Background items should not be nil.
-
testFetchSpecificBackgroundItem()
- Tests the fetching of a specific background item from the database.
- Expected Result:
- There should be no error while fetching the specific background item.
- The fetched background item should not be nil.
- The image name of the fetched background item should match the provided image name.
-
testCreateBackgroundItem()
- Tests the creation of a new background item in the database.
- Expected Result:
- There should be no error while creating the background item.
-
testSetUnactiveAllBackgroundItems()
- Tests the deactivation of all background items in the database.
- Expected Result:
- There should be no error while deactivating all background items.
-
testGetActiveBackground()
- Tests the retrieval of the active background item.
- Expected Result:
- The active background item should be an empty string, indicating no active background.
UserDBManager Tests
Unit Tests for the UserDBManager class
-
testCreateUser()
- Tests the creation of a new user in the database.
- Expected Result:
userExists
should betrue
after creating a user successfully.
-
testFetchUser()
- Tests the fetching of user data from the database.
- Expected Result:
- The fetched user data (
user
) should not benil
, and there should be noerror
.
- The fetched user data (
-
testGetCurrency()
- Tests the retrieval of the currency value associated with the user.
- Expected Result:
- The retrieved currency value (
currency
) should not benil
, and there should be noerror
.
- The retrieved currency value (
-
testUpdateCurrency()
- Tests the updating of the currency value associated with the user.
- Expected Result:
- There should be no
error
after updating the currency value.
- There should be no
-
testGetName()
- Tests the retrieval of the full name of the user.
- Expected Result:
- The retrieved name (
name
) should not benil
, and there should be noerror
.
- The retrieved name (
-
testUpdateName()
- Tests the updating of the first name and/or last name of the user.
- Expected Result:
- There should be no
error
after updating the name.
- There should be no
FoodItemDBManager Tests
Unit Tests for the FoodItemDBManager class
-
testFetchFoodItems()
- Tests the fetching of food items.
- Expected Result:
- There should be no error while fetching food items.
- The fetched food items should not be nil.
- The number of fetched food items should match the expected count.
-
testCreateFoodItem()
- Tests the creation of a food item.
- Expected Result:
- There should be no error while creating the food item.
-
testUpdateQuantity()
- Tests the update of a food item's quantity.
- Expected Result:
- There should be no error while updating the quantity.
- The updated food item should be found in the food items list.
-
testFetchQuantity()
- Tests the fetching of a food item's quantity.
- Expected Result:
- There should be no error while fetching the quantity.
- The fetched quantity should not be nil.
-
testUpdateQuantity_add()
- Tests the addition of quantity to a food item.
- Expected Result:
- There should be no error while updating the quantity.
- The updated food item should be found in the food items list.
PetItemDBManager Tests
Unit Tests for the PetItemDBManager class
-
testFetchPetItems()
- Tests the fetching of pet items.
- Expected Result:
- There should be no error while fetching pet items.
- The fetched pet items should not be nil.
-
testFetchSpecificPetItem()
- Tests the fetching of a specific pet item.
- Expected Result:
- There should be no error while fetching the specific pet item.
- The fetched pet item should not be nil.
- The fetched pet item should match the expected image name.
-
testCreatePetItem()
- Tests the creation of a pet item.
- Expected Result:
- There should be no error while creating the pet item.
- The created pet item should be found in the pet items list.
-
testSetActivePetItem()
- Tests the setting of an active pet item.
- Expected Result:
- There should be no error while setting the active pet item.
- The active pet item should match the expected image name.
-
testGetActivePet()
- Tests the retrieval of the active pet.
- Expected Result:
- There should be no error while retrieving the active pet.
- The retrieved active pet should match the expected image name.
PetDBManager Tests
Unit Tests for the PetDBManager class
-
testCreatePet()
- Tests the creation of a pet.
- Expected Result:
- The pet should exist after creation.
- The initial existence status of the pet should not match the existence status after creation.
-
testFetchPet()
- Tests the fetching of a pet.
- Expected Result:
- There should be no error while fetching the pet.
- The fetched pet should not be nil.
-
testGetXP()
- Tests the retrieval of XP.
- Expected Result:
- There should be no error while retrieving XP.
-
testGetLevel()
- Tests the retrieval of the level.
- Expected Result:
- There should be no error while retrieving the level.
- The retrieved level should not be nil.
-
testUpdateUserXP()
- Tests the updating of user XP.
- Expected Result:
- There should be no error while updating user XP.
- The total XP should match the new XP value.
-
testUpdateUserLevel()
- Tests the updating of user level.
- Expected Result:
- There should be no error while updating user level.
- The level should match the new level value.
FitnessPlanDBManager Tests
Unit Tests for the FitnessPlanDBManager class
- testCreateFitnessPlan()
- Tests the creation of a fitness plan.
- Expected Result:
- The fitness plan should not be nil after creation.
- The days per week goal of the created fitness plan should match the provided value.
- The dumbbell weight goal of the created fitness plan should match the provided value.
- The set goal of the created fitness plan should match the provided value.
- The rep goal of the created fitness plan should match the provided value.
- The notes of the created fitness plan should match the provided value.
CoreData Local DB
setUpWithError()
Sets up an in-memory Core Data environment for each test
- Ensures tests do not affect real user data by creating a mock environment
- Input/Setup action
- Core Data stack setup with in-memory store type
- Expected Result
- CoreDataManager instance is initialized without errors
- Input/Setup action
tearDownWithError()
Cleans up and deallocates the in-memory Core Data stack after each test
- Ensures all data and instances are cleaned up properly
- Input/Cleanup action
- Removing persistent stores from the coordinator
- Expected Result
- Persistent stores are removed without errors, and CoreDataManager is deallocated
- Input/Cleanup action
testCreateWorkoutSession()
Tests the ability to create a WorkoutSession entity
- Validating entity creation within the Core Data environment
- Input/User action
- Create a WorkoutSession with specified attributes
- Expected Result
- WorkoutSession entity is not nil and correctly initialized with provided values
- Input/User action
testCreateAndFetchWorkoutSessions()
Tests integration of creating and fetching WorkoutSession entities
- Ensures data consistency within the created and fetched entities
- Input/User action
- Create a WorkoutSession and then fetch it
- Expected Result
- The fetched WorkoutSessions list should not be empty and contain the created session
- Input/User action
testFetchWorkoutSessions()
Tests fetching WorkoutSession entities
- Validates the fetch functionality of the Core Data manager
- Input/User action
- Create and then fetch WorkoutSession entities
- Expected Result
- The fetch returns a list containing the newly created sessions
- Input/User action
testFetchWorkoutSessionsOnDate()
Tests fetching WorkoutSession entities based on a specific date
- Ensures that sessions on a given date are correctly retrieved
- Input/User action
- Create a WorkoutSession for today and fetch by today's date
- Expected Result
- The fetch returns a list containing only today's sessions
- Input/User action
testGetNextWorkoutNumber()
Tests retrieving the next workout number
- Ensures correct incrementation of workout numbers
- Input/User action
- Create a WorkoutSession and then retrieve the next workout number
- Expected Result
- The next workout number should be greater than the number of the last session created
- Input/User action
testFetchExerciseSets()
Tests fetching ExerciseSet entities associated with a WorkoutSession
- Validates the fetch functionality for ExerciseSets tied to specific sessions
- Input/User action
- Create a WorkoutSession and an associated ExerciseSet, then fetch the sets
- Expected Result
- The fetched exercise sets list should contain the created set
- Input/User action
testUpdateWorkoutSession()
Tests updating a WorkoutSession entity
- Verifies that changes to an entity are persisted correctly
- Input/User action
- Update an existing WorkoutSession's attributes
- Expected Result
- The updated WorkoutSession should reflect the new attribute values
- Input/User action
testUpdateExerciseSet()
Tests updating an ExerciseSet entity
- Ensures property changes are saved correctly within the entity
- Input/User action
- Update an existing ExerciseSet's attributes
- Expected Result
- The updated ExerciseSet should reflect the new attribute values
- Input/User action
testFetchAllExerciseSets()
Tests fetching all ExerciseSet entities
- Validates that multiple sets are returned when expected
- Input/User action
- Create multiple ExerciseSets and fetch all
- Expected Result
- The fetched exercise sets list should include all created sets
- Input/User action
testFetchExerciseSetsForWorkoutNum()
Tests fetching ExerciseSet entities by workout number
- Ensures they are correctly retrieved based on the workout number
- Input/User action
- Create an ExerciseSet for a specific workout number and then fetch by that number
- Expected Result
- The fetched exercise sets list should contain the sets for the specific workout number
- Input/User action