using System; using System.Collections.Generic; namespace HanvonF710XAttendanceService { internal static class DbToDeviceSummaryTests { public static int RunAll() { int failed = 0; failed += Run("existing user is skipped", TestExistingUserSkipped); failed += Run("missing user is enrolled", TestMissingUserEnrolled); failed += Run("summary contains required fields", TestSummaryContainsRequiredFields); failed += Run("multiple machines produce separate summaries", TestMultipleMachineSummaries); return failed; } private static int Run(string name, Func test) { try { if (!test()) { Console.WriteLine("FAIL: " + name); return 1; } Console.WriteLine("PASS: " + name); return 0; } catch (Exception ex) { Console.WriteLine("FAIL: " + name + " err=" + ex.Message); return 1; } } private static bool TestExistingUserSkipped() { var registered = new HashSet(StringComparer.OrdinalIgnoreCase) { "15057", "6401" }; return DbToDeviceSkipLogic.ShouldSkipAlreadyRegistered(registered, "15057") && DbToDeviceSkipLogic.ShouldSkipAlreadyRegistered(registered, " 6401 ") && !DbToDeviceSkipLogic.ShouldSkipAlreadyRegistered(registered, "99999"); } private static bool TestMissingUserEnrolled() { var registered = new HashSet(StringComparer.OrdinalIgnoreCase) { "15057" }; var summary = new DbToDeviceTargetSummary { MachineId = "105", MachineIp = "192.168.90.223", MachineType = "HANVON" }; // Existing -> skip if (DbToDeviceSkipLogic.ShouldSkipAlreadyRegistered(registered, "15057")) { summary.AlreadyRegistered++; } // Missing -> enroll if (!DbToDeviceSkipLogic.ShouldSkipAlreadyRegistered(registered, "99999")) { summary.NewlyRegistered++; } return summary.AlreadyRegistered == 1 && summary.NewlyRegistered == 1; } private static bool TestSummaryContainsRequiredFields() { var summary = new DbToDeviceTargetSummary { MachineId = "105", MachineIp = "192.168.90.223", MachineType = "HANVON", AlreadyRegistered = 620, NewlyRegistered = 30 }; summary.AddMissingMapping("88888"); summary.AddFailure("15057", "John Smith", "Production", "Employee photo not found"); summary.AddFailure("6401", "ABC XYZ", "Quality", "DUPLICATE_FACE existing_device_id=6400"); string report = summary.FormatReport(); return report.Contains("DB_TO_DEVICE SUMMARY") && report.Contains("Machine ID: 105") && report.Contains("IP: 192.168.90.223") && report.Contains("Type: HANVON") && report.Contains("Already Registered: 620") && report.Contains("Newly Registered: 30") && report.Contains("Failed: 2") && report.Contains("Missing Employee Mapping: 1") && report.Contains("Serial: 15057") && report.Contains("Name: John Smith") && report.Contains("Department: Production") && report.Contains("Reason: Employee photo not found") && report.Contains("DUPLICATE_FACE existing_device_id=6400"); } private static bool TestMultipleMachineSummaries() { var a = new DbToDeviceTargetSummary { MachineId = "105", MachineIp = "192.168.90.223", MachineType = "HANVON", AlreadyRegistered = 10, NewlyRegistered = 2 }; var b = new DbToDeviceTargetSummary { MachineId = "106", MachineIp = "10.0.1.7", MachineType = "HANVON", AlreadyRegistered = 5, NewlyRegistered = 7 }; b.AddFailure("6401", "ABC XYZ", "Quality", "DUPLICATE_FACE existing_device_id=6400"); string reportA = a.FormatReport(); string reportB = b.FormatReport(); return reportA.Contains("Machine ID: 105") && reportA.Contains("IP: 192.168.90.223") && reportA.Contains("Already Registered: 10") && reportA.Contains("Newly Registered: 2") && !reportA.Contains("10.0.1.7") && reportB.Contains("Machine ID: 106") && reportB.Contains("IP: 10.0.1.7") && reportB.Contains("Already Registered: 5") && reportB.Contains("Newly Registered: 7") && reportB.Contains("Failed: 1") && !reportB.Contains("192.168.90.223"); } } }