Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reusable Weight Scale Service, UI Tests #13

Merged
merged 7 commits into from
Jun 3, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 11 additions & 35 deletions ENGAGEHF.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
2FE5DC3A29EDD7CA004B9AB4 /* Welcome.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE5DC3429EDD7CA004B9AB4 /* Welcome.swift */; };
2FE5DC4029EDD7EE004B9AB4 /* FeatureFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE5DC3E29EDD7ED004B9AB4 /* FeatureFlags.swift */; };
2FE5DC4129EDD7EE004B9AB4 /* StorageKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE5DC3F29EDD7EE004B9AB4 /* StorageKeys.swift */; };
2FE5DC4529EDD7F2004B9AB4 /* Binding+Negate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE5DC4229EDD7F2004B9AB4 /* Binding+Negate.swift */; };
2FE5DC4629EDD7F2004B9AB4 /* Bundle+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE5DC4329EDD7F2004B9AB4 /* Bundle+Image.swift */; };
2FE5DC4729EDD7F2004B9AB4 /* CodableArray+RawRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FE5DC4429EDD7F2004B9AB4 /* CodableArray+RawRepresentable.swift */; };
2FE5DC6429EDD883004B9AB4 /* SpeziAccount in Frameworks */ = {isa = PBXBuildFile; productRef = 2FE5DC6329EDD883004B9AB4 /* SpeziAccount */; };
Expand All @@ -53,16 +52,13 @@
4D49AB002BC9D50400C77310 /* BluetoothViews in Frameworks */ = {isa = PBXBuildFile; productRef = 4D49AAFF2BC9D50400C77310 /* BluetoothViews */; };
4D49AB022BC9D50400C77310 /* SpeziBluetooth in Frameworks */ = {isa = PBXBuildFile; productRef = 4D49AB012BC9D50400C77310 /* SpeziBluetooth */; };
4D49AB062BC9D56900C77310 /* WeightScaleDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D49AB052BC9D56900C77310 /* WeightScaleDevice.swift */; };
4D49AB0D2BC9DF9100C77310 /* WeightScaleFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D49AB0C2BC9DF9100C77310 /* WeightScaleFeature.swift */; };
4D49AB0F2BC9DF9B00C77310 /* WeightMeasurement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D49AB0E2BC9DF9B00C77310 /* WeightMeasurement.swift */; };
4D4AA0A52BC5E43E00676489 /* OnboardingUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D4AA0A42BC5E43E00676489 /* OnboardingUITests.swift */; };
4DB025CA2BBE3A59002D2545 /* HomeViewUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB025C92BBE3A59002D2545 /* HomeViewUITests.swift */; };
4DB025D52BBF2E08002D2545 /* Dashboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB025D42BBF2E08002D2545 /* Dashboard.swift */; };
4DB025D82BBF2EEC002D2545 /* Greeting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DB025D72BBF2EEC002D2545 /* Greeting.swift */; };
4DBDD3442BBFAD64001FB0CA /* InvitationCodeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DBDD3432BBFAD64001FB0CA /* InvitationCodeError.swift */; };
4DBDD3462BBFAE2D001FB0CA /* InvitationCodeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DBDD3452BBFAE2D001FB0CA /* InvitationCodeView.swift */; };
4DBDD3482BC073EF001FB0CA /* FirebaseFunctions in Frameworks */ = {isa = PBXBuildFile; productRef = 4DBDD3472BC073EF001FB0CA /* FirebaseFunctions */; };
4DDFC76E2BFAA4AE002B07A1 /* WeightScaleService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDFC76D2BFAA4AE002B07A1 /* WeightScaleService.swift */; };
4DDFC7702BFAEAD7002B07A1 /* ConfirmMeasurementButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDFC76F2BFAEAD7002B07A1 /* ConfirmMeasurementButton.swift */; };
4DDFC7762BFB46FF002B07A1 /* MeasurementLayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDFC7752BFB46FF002B07A1 /* MeasurementLayer.swift */; };
4DDFC7792BFB4E7D002B07A1 /* ViewElements.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DDFC7782BFB4E7D002B07A1 /* ViewElements.swift */; };
Expand All @@ -75,6 +71,8 @@
9739A0C62AD7B5730084BEA5 /* FirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 9739A0C52AD7B5730084BEA5 /* FirebaseStorage */; };
97D73D6A2AD860AD00B47FA0 /* SpeziFirebaseStorage in Frameworks */ = {isa = PBXBuildFile; productRef = 97D73D692AD860AD00B47FA0 /* SpeziFirebaseStorage */; };
A92E4DF02BAA001100AC8DE8 /* OrderedCollections in Frameworks */ = {isa = PBXBuildFile; productRef = A92E4DEF2BAA001100AC8DE8 /* OrderedCollections */; };
A96C56B62C0A149B00D6A50B /* WeightScaleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96C56B52C0A149B00D6A50B /* WeightScaleTests.swift */; };
A96C56BB2C0DFFCE00D6A50B /* InvitationCodeModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = A96C56BA2C0DFFCE00D6A50B /* InvitationCodeModule.swift */; };
A9720E432ABB68CC00872D23 /* AccountSetupHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9720E422ABB68CC00872D23 /* AccountSetupHeader.swift */; };
A9D83F962B083794000D0C78 /* SpeziFirebaseAccountStorage in Frameworks */ = {isa = PBXBuildFile; productRef = A9D83F952B083794000D0C78 /* SpeziFirebaseAccountStorage */; };
A9DFE8A92ABE551400428242 /* AccountButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9DFE8A82ABE551400428242 /* AccountButton.swift */; };
Expand Down Expand Up @@ -118,7 +116,6 @@
2FE5DC3429EDD7CA004B9AB4 /* Welcome.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Welcome.swift; sourceTree = "<group>"; };
2FE5DC3E29EDD7ED004B9AB4 /* FeatureFlags.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FeatureFlags.swift; sourceTree = "<group>"; };
2FE5DC3F29EDD7EE004B9AB4 /* StorageKeys.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StorageKeys.swift; sourceTree = "<group>"; };
2FE5DC4229EDD7F2004B9AB4 /* Binding+Negate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Binding+Negate.swift"; sourceTree = "<group>"; };
2FE5DC4329EDD7F2004B9AB4 /* Bundle+Image.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Bundle+Image.swift"; sourceTree = "<group>"; };
2FE5DC4429EDD7F2004B9AB4 /* CodableArray+RawRepresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CodableArray+RawRepresentable.swift"; sourceTree = "<group>"; };
2FE5DC5529EDD811004B9AB4 /* SocialSupportQuestionnaire.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = SocialSupportQuestionnaire.json; sourceTree = "<group>"; };
Expand All @@ -127,15 +124,12 @@
4D052DB72BE07892006A784E /* MeasurementManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeasurementManager.swift; sourceTree = "<group>"; };
4D19ED002BE5CAFC00CDBAA8 /* MeasurementRecordedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeasurementRecordedView.swift; sourceTree = "<group>"; };
4D49AB052BC9D56900C77310 /* WeightScaleDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeightScaleDevice.swift; sourceTree = "<group>"; };
4D49AB0C2BC9DF9100C77310 /* WeightScaleFeature.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeightScaleFeature.swift; sourceTree = "<group>"; };
4D49AB0E2BC9DF9B00C77310 /* WeightMeasurement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeightMeasurement.swift; sourceTree = "<group>"; };
4D4AA0A42BC5E43E00676489 /* OnboardingUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingUITests.swift; sourceTree = "<group>"; };
4DB025C92BBE3A59002D2545 /* HomeViewUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewUITests.swift; sourceTree = "<group>"; };
4DB025D42BBF2E08002D2545 /* Dashboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dashboard.swift; sourceTree = "<group>"; };
4DB025D72BBF2EEC002D2545 /* Greeting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Greeting.swift; sourceTree = "<group>"; };
4DBDD3432BBFAD64001FB0CA /* InvitationCodeError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitationCodeError.swift; sourceTree = "<group>"; };
4DBDD3452BBFAE2D001FB0CA /* InvitationCodeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitationCodeView.swift; sourceTree = "<group>"; };
4DDFC76D2BFAA4AE002B07A1 /* WeightScaleService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeightScaleService.swift; sourceTree = "<group>"; };
4DDFC76F2BFAEAD7002B07A1 /* ConfirmMeasurementButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConfirmMeasurementButton.swift; sourceTree = "<group>"; };
4DDFC7752BFB46FF002B07A1 /* MeasurementLayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeasurementLayer.swift; sourceTree = "<group>"; };
4DDFC7782BFB4E7D002B07A1 /* ViewElements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewElements.swift; sourceTree = "<group>"; };
Expand All @@ -146,6 +140,8 @@
653A256128338800005D4D48 /* ENGAGEHFTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ENGAGEHFTests.swift; sourceTree = "<group>"; };
653A256728338800005D4D48 /* ENGAGEHFUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ENGAGEHFUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
653A258928339462005D4D48 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A96C56B52C0A149B00D6A50B /* WeightScaleTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeightScaleTests.swift; sourceTree = "<group>"; };
A96C56BA2C0DFFCE00D6A50B /* InvitationCodeModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvitationCodeModule.swift; sourceTree = "<group>"; };
A9720E422ABB68CC00872D23 /* AccountSetupHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSetupHeader.swift; sourceTree = "<group>"; };
A9DFE8A82ABE551400428242 /* AccountButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountButton.swift; sourceTree = "<group>"; };
A9FE7ACF2AA39BAB0077B045 /* AccountSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSheet.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -262,7 +258,6 @@
2FE5DC3D29EDD7E4004B9AB4 /* Helper */ = {
isa = PBXGroup;
children = (
2FE5DC4229EDD7F2004B9AB4 /* Binding+Negate.swift */,
2FE5DC4329EDD7F2004B9AB4 /* Bundle+Image.swift */,
2FE5DC4429EDD7F2004B9AB4 /* CodableArray+RawRepresentable.swift */,
);
Expand Down Expand Up @@ -290,29 +285,10 @@
path = Bluetooth;
sourceTree = "<group>";
};
4D49AB092BC9DA8B00C77310 /* WeightScale */ = {
isa = PBXGroup;
children = (
4D49AB0A2BC9DA9300C77310 /* Characteristics */,
4D49AB052BC9D56900C77310 /* WeightScaleDevice.swift */,
4DDFC76D2BFAA4AE002B07A1 /* WeightScaleService.swift */,
);
path = WeightScale;
sourceTree = "<group>";
};
4D49AB0A2BC9DA9300C77310 /* Characteristics */ = {
isa = PBXGroup;
children = (
4D49AB0C2BC9DF9100C77310 /* WeightScaleFeature.swift */,
4D49AB0E2BC9DF9B00C77310 /* WeightMeasurement.swift */,
);
path = Characteristics;
sourceTree = "<group>";
};
4D49AB142BCF6FC400C77310 /* Devices */ = {
isa = PBXGroup;
children = (
4D49AB092BC9DA8B00C77310 /* WeightScale */,
4D49AB052BC9D56900C77310 /* WeightScaleDevice.swift */,
);
path = Devices;
sourceTree = "<group>";
Expand Down Expand Up @@ -383,6 +359,7 @@
2F4E237D2989A2FE0013F3D9 /* LaunchTests.swift */,
4DB025C92BBE3A59002D2545 /* HomeViewUITests.swift */,
4D4AA0A42BC5E43E00676489 /* OnboardingUITests.swift */,
A96C56B52C0A149B00D6A50B /* WeightScaleTests.swift */,
);
path = ENGAGEHFUITests;
sourceTree = "<group>";
Expand All @@ -400,6 +377,7 @@
A9FE7ACF2AA39BAB0077B045 /* AccountSheet.swift */,
A9720E422ABB68CC00872D23 /* AccountSetupHeader.swift */,
A9DFE8A82ABE551400428242 /* AccountButton.swift */,
A96C56BA2C0DFFCE00D6A50B /* InvitationCodeModule.swift */,
);
path = Account;
sourceTree = "<group>";
Expand Down Expand Up @@ -596,10 +574,8 @@
4D19ED012BE5CAFC00CDBAA8 /* MeasurementRecordedView.swift in Sources */,
2FE5DCB129EE6107004B9AB4 /* AccountOnboarding.swift in Sources */,
2FE5DC3A29EDD7CA004B9AB4 /* Welcome.swift in Sources */,
4DDFC76E2BFAA4AE002B07A1 /* WeightScaleService.swift in Sources */,
2FE5DC3829EDD7CA004B9AB4 /* InterestingModules.swift in Sources */,
2FE5DC3529EDD7CA004B9AB4 /* Consent.swift in Sources */,
2FE5DC4529EDD7F2004B9AB4 /* Binding+Negate.swift in Sources */,
4DBDD3442BBFAD64001FB0CA /* InvitationCodeError.swift in Sources */,
2FC975A82978F11A00BA99FE /* Home.swift in Sources */,
4DDFC7792BFB4E7D002B07A1 /* ViewElements.swift in Sources */,
Expand All @@ -610,10 +586,9 @@
2FF53D8D2A8729D600042B76 /* ENGAGEHFStandard.swift in Sources */,
2FE5DC4729EDD7F2004B9AB4 /* CodableArray+RawRepresentable.swift in Sources */,
4D052DB82BE07892006A784E /* MeasurementManager.swift in Sources */,
A96C56BB2C0DFFCE00D6A50B /* InvitationCodeModule.swift in Sources */,
4DB025D82BBF2EEC002D2545 /* Greeting.swift in Sources */,
A9720E432ABB68CC00872D23 /* AccountSetupHeader.swift in Sources */,
4D49AB0F2BC9DF9B00C77310 /* WeightMeasurement.swift in Sources */,
4D49AB0D2BC9DF9100C77310 /* WeightScaleFeature.swift in Sources */,
2FE5DC4029EDD7EE004B9AB4 /* FeatureFlags.swift in Sources */,
2FE5DC4629EDD7F2004B9AB4 /* Bundle+Image.swift in Sources */,
2F4E23832989D51F0013F3D9 /* ENGAGEHFTestingSetup.swift in Sources */,
Expand Down Expand Up @@ -641,6 +616,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A96C56B62C0A149B00D6A50B /* WeightScaleTests.swift in Sources */,
4D4AA0A52BC5E43E00676489 /* OnboardingUITests.swift in Sources */,
2F4E237E2989A2FE0013F3D9 /* LaunchTests.swift in Sources */,
4DB025CA2BBE3A59002D2545 /* HomeViewUITests.swift in Sources */,
Expand Down Expand Up @@ -1242,8 +1218,8 @@
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/StanfordSpezi/SpeziBluetooth.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.0.2;
branch = "fix/weight-scale-feature";
kind = branch;
};
};
5661551B2AB8384200209B80 /* XCRemoteSwiftPackageReference "swift-package-list" */ = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/StanfordSpezi/SpeziBluetooth.git",
"state" : {
"revision" : "68966242caa49834a352953225b8b1d234481d77",
"version" : "1.4.0"
"branch" : "fix/weight-scale-feature",
"revision" : "00df06c021749a1b16a3bc383dd62a1d19922bc6"
}
},
{
Expand Down
12 changes: 10 additions & 2 deletions ENGAGEHF.xcodeproj/xcshareddata/xcschemes/ENGAGEHF.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -82,13 +82,21 @@
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "--showOnboarding"
argument = "--setupTestEnvironment"
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--skipOnboarding"
argument = "--testMockDevices"
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--showOnboarding"
isEnabled = "NO">
</CommandLineArgument>
<CommandLineArgument
argument = "--skipOnboarding"
isEnabled = "YES">
</CommandLineArgument>
<CommandLineArgument
argument = "--testSchedule"
isEnabled = "NO">
Expand Down
120 changes: 120 additions & 0 deletions ENGAGEHF/Account/InvitationCodeModule.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
//
// This source file is part of the ENGAGE-HF project based on the Stanford Spezi Template Application project
//
// SPDX-FileCopyrightText: 2024 Stanford University
//
// SPDX-License-Identifier: MIT
//

import Firebase
import FirebaseAuth
import FirebaseFunctions
import Spezi
import SpeziAccount
import SpeziFirebaseConfiguration


class InvitationCodeModule: Module, EnvironmentAccessible {
@Dependency private var firebase: ConfigureFirebaseApp

@Application(\.logger) private var logger

func configure() {
if FeatureFlags.useFirebaseEmulator {
Functions.functions().useEmulator(withHost: "localhost", port: 5001)
}
}

func signOutAccount() {
do {
try Auth.auth().signOut()
} catch {
logger.debug("Failed to sing out firebase account: \(error)")

Check warning on line 32 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L32

Added line #L32 was not covered by tests
}
}

func verifyOnboardingCode(_ invitationCode: String) async throws {
do {
if FeatureFlags.disableFirebase {
guard invitationCode == "ENGAGEHFTEST1" else {
throw InvitationCodeError.invitationCodeInvalid
}

try? await Task.sleep(for: .seconds(0.25))

Check warning on line 43 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L39-L43

Added lines #L39 - L43 were not covered by tests
} else {
try Auth.auth().signOut()

try await Auth.auth().signInAnonymously()
let checkInvitationCode = Functions.functions().httpsCallable("checkInvitationCode")

do {
_ = try await checkInvitationCode.call(
[
"invitationCode": invitationCode
]
)
} catch {
logger.error("Failed to check invitation code: \(error)")
throw InvitationCodeError.invitationCodeInvalid

Check warning on line 58 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L57-L58

Added lines #L57 - L58 were not covered by tests
}
}
} catch let error as NSError {
if let errorCode = FunctionsErrorCode(rawValue: error.code) {
// Handle Firebase-specific errors.
switch errorCode {
case .unauthenticated:
throw InvitationCodeError.userNotAuthenticated
case .notFound:
throw InvitationCodeError.invitationCodeInvalid
default:
throw InvitationCodeError.generalError(error.localizedDescription)
}
} else {
// Handle other errors, such as network issues or unexpected behavior.
throw InvitationCodeError.generalError(error.localizedDescription)
}

Check warning on line 75 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L62-L75

Added lines #L62 - L75 were not covered by tests
}
}

@MainActor
func setupTestEnvironment(account: Account, invitationCode: String) async throws {
let email = "[email protected]"
let password = "123456789"

// let the initial stateChangeDelegate of FirebaseAuth get called. Otherwise, we will interfere with that.
try await Task.sleep(for: .milliseconds(500))

if let details = account.details,
details.email == email {
return

Check warning on line 89 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L89

Added line #L89 was not covered by tests
}

guard let service = account.registeredAccountServices.compactMap({ $0 as? any UserIdPasswordAccountService }).first else {
preconditionFailure("Failed to retrieve a user-id-password based account service for test account setup!")

Check warning on line 93 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L93

Added line #L93 was not covered by tests
}

do {
try await service.login(userId: email, password: password)
return // account was already established previously
} catch {
// probably doesn't exists. We try to create a new one below
}

try await verifyOnboardingCode(invitationCode)
try await setupTestAccount(service: service, email: email, password: password)
}

Check warning on line 105 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L104-L105

Added lines #L104 - L105 were not covered by tests

private func setupTestAccount(service: any UserIdPasswordAccountService, email: String, password: String) async throws {
do {
let details = SignupDetails.Builder()
.set(\.userId, value: email)
.set(\.name, value: PersonNameComponents(givenName: "Leland", familyName: "Stanford"))
.set(\.password, value: password)
.build()
try await service.signUp(signupDetails: details)
} catch {
logger.error("Failed setting up test account : \(error)")
throw error

Check warning on line 117 in ENGAGEHF/Account/InvitationCodeModule.swift

View check run for this annotation

Codecov / codecov/patch

ENGAGEHF/Account/InvitationCodeModule.swift#L116-L117

Added lines #L116 - L117 were not covered by tests
}
}
}
Loading
Loading