diff --git a/apps/KronaStaffTerminal.Tests/ScannerRecoveryTests.cs b/apps/KronaStaffTerminal.Tests/ScannerRecoveryTests.cs
index 433ed23..735bb4c 100644
--- a/apps/KronaStaffTerminal.Tests/ScannerRecoveryTests.cs
+++ b/apps/KronaStaffTerminal.Tests/ScannerRecoveryTests.cs
@@ -88,7 +88,7 @@ public class ScannerRecoveryTests
int retries = 0;
while (retries < 5)
{
- await Task.Delay(10);
+ await Task.Delay(10, TestContext.Current.CancellationToken);
try
{
scanner.Connect(0, Array.Empty<(int, string)>());
@@ -106,7 +106,7 @@ public class ScannerRecoveryTests
scanner.SimulateDisconnect();
// Emulate the hardware coming back after a short delay
- await Task.Delay(20);
+ await Task.Delay(20, TestContext.Current.CancellationToken);
scanner.AddVirtualDevice(0, "SLK20R", "SERIAL"); // ensure device is discoverable if it was cleared
await reconnectTcs.Task;
diff --git a/apps/KronaStaffTerminal/MainPage.xaml.cs b/apps/KronaStaffTerminal/MainPage.xaml.cs
index 99c4bde..1a4d976 100644
--- a/apps/KronaStaffTerminal/MainPage.xaml.cs
+++ b/apps/KronaStaffTerminal/MainPage.xaml.cs
@@ -17,8 +17,12 @@ public sealed partial class MainPage : Page
private readonly AttendanceSyncService _attendanceSync = new();
private readonly AttendanceTracker _attendanceTracker = new();
private readonly TerminalIpcClient _ipcClient = new();
- private readonly FingerprintScanner _scanner = new();
+ private readonly IFingerprintScanner _scanner;
private readonly IUpdateSource _updateSource = new ForgejoUpdateSource();
+
+ /// Инъекция фабрики для тестирования. По умолчанию создаёт реальный FingerprintScanner.
+ public static Func? ScannerFactory { get; set; }
+
private TerminalState _state = new();
private bool _loaded;
private TaskCompletionSource? _adminAuthCompletion;
@@ -57,6 +61,8 @@ public sealed partial class MainPage : Page
CrashLogService.Write(exception);
throw;
}
+
+ _scanner = ScannerFactory?.Invoke() ?? new FingerprintScanner();
_scanner.StatusChanged += message => Enqueue(() => SetStatus(message));
_scanner.StateChanged += (state, message) => Enqueue(() => HandleScannerStateChanged(state, message));
_scanner.RegistrationProgress += count => Enqueue(() => SetStatus($"Мастер регистрации: принят скан {count}/3. Уберите палец и приложите снова."));