Surfaced recording flow errors to the user through an alert in the Recording package target.
This commit is contained in:
@@ -19,6 +19,7 @@ struct RecordingViewModelTests {
|
||||
|
||||
#expect(model.state == .notRecording)
|
||||
#expect(model.elapsedSeconds == 0)
|
||||
#expect(model.error == nil)
|
||||
#expect(model.textTimer == "00:00")
|
||||
#expect(model.transcription == nil)
|
||||
}
|
||||
@@ -342,6 +343,99 @@ struct RecordingViewModelTests {
|
||||
|
||||
}
|
||||
|
||||
// MARK: Errors
|
||||
|
||||
@MainActor
|
||||
@Suite("Errors")
|
||||
struct Errors {
|
||||
|
||||
@Test func `surfaces a capture failure`() async throws {
|
||||
let capturer = CapturingMock()
|
||||
|
||||
capturer.error = ErrorMock()
|
||||
|
||||
let model = Model(capturer: capturer)
|
||||
|
||||
model.pressedMain()
|
||||
|
||||
try await Task.sleep(for: .seconds(0.1))
|
||||
|
||||
#expect(model.error == .captureFailed)
|
||||
#expect(model.state == .notRecording)
|
||||
}
|
||||
|
||||
@Test func `surfaces a denied microphone permission`() async throws {
|
||||
let capturer = CapturingMock()
|
||||
|
||||
capturer.error = AudioCapturingError.permissionNotGranted
|
||||
|
||||
let model = Model(capturer: capturer)
|
||||
|
||||
model.pressedMain()
|
||||
|
||||
try await Task.sleep(for: .seconds(0.1))
|
||||
|
||||
#expect(model.error == .permissionDenied)
|
||||
}
|
||||
|
||||
@Test func `surfaces a transcription failure`() async throws {
|
||||
let transcriber = TranscribingMock()
|
||||
|
||||
transcriber.error = ErrorMock()
|
||||
|
||||
let model = Model(
|
||||
transcribe: transcriber
|
||||
)
|
||||
|
||||
model.drive(to: .processing)
|
||||
|
||||
try await Task.sleep(for: .seconds(0.5))
|
||||
|
||||
#expect(model.error == .transcriptionFailed)
|
||||
#expect(model.transcription == nil)
|
||||
}
|
||||
|
||||
@Test func `clears the error when dismissed`() async throws {
|
||||
let capturer = CapturingMock()
|
||||
|
||||
capturer.error = ErrorMock()
|
||||
|
||||
let model = Model(capturer: capturer)
|
||||
|
||||
model.pressedMain()
|
||||
|
||||
try await Task.sleep(for: .seconds(0.1))
|
||||
|
||||
#expect(model.error != nil)
|
||||
|
||||
model.dismissedError()
|
||||
|
||||
#expect(model.error == nil)
|
||||
}
|
||||
|
||||
@Test func `clears the error when a new recording starts`() async throws {
|
||||
let capturer = CapturingMock()
|
||||
|
||||
capturer.error = ErrorMock()
|
||||
|
||||
let model = Model(capturer: capturer)
|
||||
|
||||
model.pressedMain()
|
||||
|
||||
try await Task.sleep(for: .seconds(0.1))
|
||||
|
||||
#expect(model.error != nil)
|
||||
|
||||
capturer.error = nil
|
||||
model.pressedMain()
|
||||
|
||||
#expect(model.error == nil)
|
||||
|
||||
model.pressedMain()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: Interruptions
|
||||
|
||||
@MainActor
|
||||
|
||||
Reference in New Issue
Block a user