mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 10:29:58 +02:00
- Introduce a CoreGateway protocol so feature models depend on a seam (CoreRepository conforms); enables faking the core in tests - Add a VniDropTests target with 42 tests mirroring the KMP suites: approval coordinator, send/receive/settings/app models, preferences, file previews, invitation decode, message queue, error mapping - Add a fake gateway/file-system/device-info and fixtures - Add .github/workflows/apple.yml: build the Rust core, generate the project, and run the tests on an iOS Simulator
54 lines
1.9 KiB
Swift
54 lines
1.9 KiB
Swift
import XCTest
|
|
@testable import VniDrop
|
|
|
|
/// Ports `ui/feedback/UiMessageControllerTest.kt` and `UserFacingErrorTest.kt`.
|
|
@MainActor
|
|
final class UiMessageControllerTests: XCTestCase {
|
|
|
|
func testQueuesAndAdvances() {
|
|
let c = UiMessageController()
|
|
c.show(UiMessage(text: .dynamic("first")))
|
|
c.show(UiMessage(text: .dynamic("second")))
|
|
XCTAssertEqual(c.current?.text, .dynamic("first"))
|
|
|
|
c.advance()
|
|
XCTAssertEqual(c.current?.text, .dynamic("second"))
|
|
|
|
c.advance()
|
|
XCTAssertNil(c.current)
|
|
}
|
|
|
|
func testErrorSuppressesUserCancellation() {
|
|
let c = UiMessageController()
|
|
c.error(InvitationError.message("QR scanning was cancelled"))
|
|
XCTAssertNil(c.current) // cancellations are swallowed
|
|
}
|
|
|
|
func testErrorShowsNonCancellation() {
|
|
let c = UiMessageController()
|
|
c.error(InvitationError.message("The transfer was refused"))
|
|
XCTAssertEqual(c.current?.tone, .error)
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
final class UserFacingErrorTests: XCTestCase {
|
|
|
|
func testIsUserCancellation() {
|
|
XCTAssertTrue(InvitationError.message("NFC reading was cancelled").isUserCancellation)
|
|
XCTAssertTrue(InvitationError.message("User canceled the picker").isUserCancellation)
|
|
XCTAssertFalse(InvitationError.message("A database error occurred").isUserCancellation)
|
|
}
|
|
|
|
func testToUiTextMapsKnownReasons() {
|
|
XCTAssertEqual(InvitationError.message("The transfer was refused").toUiText(), .resource("error_permission"))
|
|
XCTAssertEqual(InvitationError.message("invalid ticket").toUiText(), .resource("error_invalid_ticket"))
|
|
XCTAssertEqual(InvitationError.message("Select at least one file to share").toUiText(), .resource("error_share_empty"))
|
|
XCTAssertEqual(InvitationError.message("Camera access is required").toUiText(), .resource("error_camera"))
|
|
}
|
|
|
|
func testToUiTextFallsBackToGeneric() {
|
|
XCTAssertEqual(InvitationError.message("something entirely unexpected").toUiText(), .resource("error_generic"))
|
|
}
|
|
}
|