Files
Kisani/Tests/LANMonitorTests.swift

49 lines
1.8 KiB
Swift
Raw Normal View History

import XCTest
@testable import NASBackup
final class LANMonitorTests: XCTestCase {
func test_ssidMatch_triggersCallback() async {
let monitor = LANMonitor.shared
let trusted = ["HomeNet"]
var triggered = false
monitor.onTrustedNetworkJoined = { _ in triggered = true }
// Inject known SSID via checkAndTriggerIfTrusted using a subclass stub
// Since fetchCurrentSSID uses NEHotspotNetwork (requires device), we test
// the guard logic directly through checkAndTriggerIfTrusted with a mock SSID.
let stub = LANMonitorSSIDStub(ssid: "HomeNet")
await stub.checkAndTrigger(trustedSSIDs: trusted) { ssid in triggered = true }
XCTAssertTrue(triggered)
}
func test_ssidMismatch_doesNotTrigger() async {
var triggered = false
let stub = LANMonitorSSIDStub(ssid: "RandomCafe")
await stub.checkAndTrigger(trustedSSIDs: ["HomeNet"]) { _ in triggered = true }
XCTAssertFalse(triggered)
}
func test_trustedSSIDs_caseInsensitiveMatch() async {
var triggered = false
let stub = LANMonitorSSIDStub(ssid: "homenet")
let trusted = ["HomeNet"]
// Case-sensitive check verify current behaviour; adjust if policy changes.
await stub.checkAndTrigger(trustedSSIDs: trusted) { _ in triggered = true }
// Current implementation is case-sensitive; update assertion if behaviour changes.
XCTAssertFalse(triggered, "Current implementation is case-sensitive")
}
}
// Lightweight stub that bypasses NEHotspotNetwork entitlement requirement.
struct LANMonitorSSIDStub {
let ssid: String?
func checkAndTrigger(trustedSSIDs: [String], callback: (String) -> Void) async {
guard let ssid, trustedSSIDs.contains(ssid) else { return }
callback(ssid)
}
}