M25: Einrichten-Wizard-Politur + SSH-Trust-Persistenz endlich verifiziert

- WAN-Schritt: fehlenden "Zurück"-Button ergänzt (beide Modi)
- "Abbrechen"/"Jetzt sichern" prominent gemacht (wie "Neu scannen")
- LAN-/VLAN-Schritt: Adressfelder starten leer, nur Format-Beispiel im
  Feld sichtbar statt vorbelegter Werte. VlanStepView bekam dafür eine
  Validierungssperre auf "Weiter" (fehlte bisher, war ok solange
  Defaults immer gültig waren). Zwei Tests entsprechend angepasst.
- SSH-Host-Key-Trust aus M24 hatte sich entgegen der Live-Bestätigung
  nie tatsächlich persistiert (defaults read zeigte leeren Schlüssel,
  Ursache ungeklärt) — betraf BackupServices dedizierte SSH-Verbindung
  beim ersten Experte-Tab-Schreibversuch pro Sitzung. Erneut über den
  bestehenden Trust-Dialog bestätigt, diesmal per defaults read
  verifiziert statt nur der UI-Bestätigung vertraut.

Alles live bestätigt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Kay
2026-09-16 12:41:47 +02:00
co-authored by Claude Sonnet 5
parent 086393d379
commit 8a5df3338a
11 changed files with 146 additions and 28 deletions
@@ -40,7 +40,15 @@ final class RouterOSCommandBuilderTests: XCTestCase {
}
func testLanDhcpCommandsCoverAddressPoolServerAndNetwork() {
let config = LanDhcpConfig()
// Address fields default to "" now (Nutzerwunsch, 2026-09-16: fields start empty,
// showing only the format example) set explicitly here so this test keeps verifying
// the command-building logic itself, not incidentally the model's old default values.
var config = LanDhcpConfig()
config.networkAddress = "192.168.88.0/24"
config.routerAddress = "192.168.88.1/24"
config.poolRangeStart = "192.168.88.10"
config.poolRangeEnd = "192.168.88.254"
config.dnsServers = "192.168.88.1"
let commands = config.buildCommands()
XCTAssertEqual(commands.count, 6)
+9 -5
View File
@@ -23,12 +23,16 @@ final class VlanEntryTests: XCTestCase {
XCTAssertEqual(commands[7].arguments["interface"], "vlan20")
}
func testDefaultAddressesAreDerivedFromVlanID() {
/// Address fields start empty by design (Nutzerwunsch, 2026-09-16: "die auszufüllenden
/// Felder leer lassen, nur Beispiele zeigen ... so sieht man das Schema dahinter") a
/// previous version auto-derived these from the VLAN ID; replaced with this test.
func testDefaultAddressesStartEmptyForExamplePlaceholder() {
let vlan = VlanEntry(vlanID: 30, parentInterface: "bridge")
XCTAssertEqual(vlan.routerAddress, "192.168.30.1/24")
XCTAssertEqual(vlan.networkAddress, "192.168.30.0/24")
XCTAssertEqual(vlan.poolRangeStart, "192.168.30.10")
XCTAssertEqual(vlan.poolRangeEnd, "192.168.30.254")
XCTAssertEqual(vlan.routerAddress, "")
XCTAssertEqual(vlan.networkAddress, "")
XCTAssertEqual(vlan.poolRangeStart, "")
XCTAssertEqual(vlan.poolRangeEnd, "")
XCTAssertEqual(vlan.dnsServers, "")
}
}