HanvonAttendanceService/DbToDeviceSummaryTests.cs

138 lines
5.2 KiB
C#

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<bool> 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<string>(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<string>(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");
}
}
}