189 lines
5.4 KiB
Swift
189 lines
5.4 KiB
Swift
// FlowHomePiPStatusPolicyTests.swift
|
|
// OSGKeyboardTests
|
|
|
|
@testable import OSGKeyboard
|
|
import XCTest
|
|
|
|
final class FlowHomePiPStatusPolicyTests: XCTestCase {
|
|
|
|
func testPreparingAndRecoveringExposeAttemptProgress() {
|
|
XCTAssertEqual(
|
|
descriptor(for: .preparing(attempt: 1, total: 3)),
|
|
.progress(
|
|
localizationKey: "home.flow.preparingProgress",
|
|
attempt: 1,
|
|
total: 3
|
|
)
|
|
)
|
|
XCTAssertEqual(
|
|
descriptor(for: .recovering(attempt: 2, total: 3)),
|
|
.progress(
|
|
localizationKey: "home.flow.recoveringProgress",
|
|
attempt: 2,
|
|
total: 3
|
|
)
|
|
)
|
|
}
|
|
|
|
func testTakeoverAndFailureUseActionableStatuses() {
|
|
XCTAssertEqual(
|
|
descriptor(for: .waitingForForeground),
|
|
.text(localizationKey: "home.flow.waitingForForeground")
|
|
)
|
|
XCTAssertEqual(
|
|
descriptor(for: .failed(.systemRejected)),
|
|
.text(localizationKey: "home.flow.recoveryFailed")
|
|
)
|
|
}
|
|
|
|
func testActiveSessionDoesNotClaimReadyWithoutReadyContract() {
|
|
XCTAssertEqual(
|
|
FlowHomePiPStatusPolicy.descriptor(
|
|
lifecycle: .active,
|
|
isStarting: false,
|
|
isRecording: false,
|
|
isProcessing: false,
|
|
isActive: true,
|
|
isHostReady: false
|
|
),
|
|
.text(localizationKey: "home.flow.notReady")
|
|
)
|
|
XCTAssertEqual(
|
|
FlowHomePiPStatusPolicy.descriptor(
|
|
lifecycle: .active,
|
|
isStarting: false,
|
|
isRecording: false,
|
|
isProcessing: false,
|
|
isActive: true,
|
|
isHostReady: true
|
|
),
|
|
.text(localizationKey: "home.flow.label")
|
|
)
|
|
}
|
|
|
|
func testRetryAppearsOnlyForRecoverableFailureWithPermissions() {
|
|
XCTAssertTrue(
|
|
FlowHomePiPStatusPolicy.canRetry(
|
|
lifecycle: .failed(.timedOut),
|
|
needsPermissionSetup: false
|
|
)
|
|
)
|
|
XCTAssertFalse(
|
|
FlowHomePiPStatusPolicy.canRetry(
|
|
lifecycle: .failed(.timedOut),
|
|
needsPermissionSetup: true
|
|
)
|
|
)
|
|
XCTAssertFalse(
|
|
FlowHomePiPStatusPolicy.canRetry(
|
|
lifecycle: .recovering(attempt: 1, total: 3),
|
|
needsPermissionSetup: false
|
|
)
|
|
)
|
|
}
|
|
|
|
func testConnectionCardDisappearsWhenSessionIsHealthy() {
|
|
XCTAssertFalse(
|
|
shouldShowConnectionCard(
|
|
lifecycle: .active,
|
|
isHostReady: true
|
|
)
|
|
)
|
|
}
|
|
|
|
func testConnectionCardRemainsVisibleWhilePreparingOrFailed() {
|
|
XCTAssertTrue(
|
|
shouldShowConnectionCard(
|
|
lifecycle: .preparing(attempt: 1, total: 3),
|
|
isHostReady: false
|
|
)
|
|
)
|
|
XCTAssertTrue(
|
|
shouldShowConnectionCard(
|
|
lifecycle: .failed(.timedOut),
|
|
isHostReady: false
|
|
)
|
|
)
|
|
}
|
|
|
|
func testNormalRecordingDoesNotBringConnectionCardBack() {
|
|
XCTAssertFalse(
|
|
shouldShowConnectionCard(
|
|
lifecycle: .active,
|
|
isRecording: true,
|
|
isHostReady: false
|
|
)
|
|
)
|
|
}
|
|
|
|
func testLocalAndPolishOnlySetupLinksToTextPolish() {
|
|
XCTAssertEqual(
|
|
HomeServiceSetupPolicy.apiKeyDeepLink(
|
|
isLocalEngine: true,
|
|
isASRConfigured: true
|
|
),
|
|
.textPolish
|
|
)
|
|
XCTAssertEqual(
|
|
HomeServiceSetupPolicy.apiKeyDeepLink(
|
|
isLocalEngine: false,
|
|
isASRConfigured: true
|
|
),
|
|
.textPolish
|
|
)
|
|
XCTAssertEqual(
|
|
HomeServiceSetupPolicy.apiKeyMessageKey(
|
|
isLocalEngine: false,
|
|
isASRConfigured: true
|
|
),
|
|
"home.setup.polishKeyMissing"
|
|
)
|
|
}
|
|
|
|
func testCloudSetupLinksToSpeechRecognitionWhenASRIsMissing() {
|
|
XCTAssertEqual(
|
|
HomeServiceSetupPolicy.apiKeyDeepLink(
|
|
isLocalEngine: false,
|
|
isASRConfigured: false
|
|
),
|
|
.speechRecognition
|
|
)
|
|
XCTAssertEqual(
|
|
HomeServiceSetupPolicy.apiKeyMessageKey(
|
|
isLocalEngine: false,
|
|
isASRConfigured: false
|
|
),
|
|
"home.setup.cloudIncomplete"
|
|
)
|
|
}
|
|
|
|
private func descriptor(
|
|
for lifecycle: FlowPiPLifecycleState
|
|
) -> FlowHomePiPStatusDescriptor {
|
|
FlowHomePiPStatusPolicy.descriptor(
|
|
lifecycle: lifecycle,
|
|
isStarting: false,
|
|
isRecording: false,
|
|
isProcessing: false,
|
|
isActive: false,
|
|
isHostReady: false
|
|
)
|
|
}
|
|
|
|
private func shouldShowConnectionCard(
|
|
lifecycle: FlowPiPLifecycleState,
|
|
isRecording: Bool = false,
|
|
isHostReady: Bool
|
|
) -> Bool {
|
|
FlowHomePiPStatusPolicy.shouldShowConnectionCard(
|
|
lifecycle: lifecycle,
|
|
needsPermissionSetup: false,
|
|
needsAPIKeySetup: false,
|
|
hasSessionWarning: false,
|
|
isRecording: isRecording,
|
|
isProcessing: false,
|
|
isHostReady: isHostReady
|
|
)
|
|
}
|
|
}
|