using AxiOmron.PcbCheck.Models;
using AxiOmron.PcbCheck.Services.Implementations;
using Xunit;
namespace AxiOmron.PcbCheck.Tests;
///
/// 验证双扫码枪结果汇总规则。
///
public sealed class DualScannerResultMergerTests
{
///
/// 任一扫码枪成功时,应使用成功条码继续后续 SFTP 流程。
///
[Fact]
public void Merge_ShouldUseSecondBarcode_WhenOnlySecondScannerSucceeds()
{
var first = new ScanOperationResult
{
IsSuccess = false,
DeviceConnected = true,
ErrorMessage = "扫码枪1超时"
};
var second = new ScanOperationResult
{
IsSuccess = true,
DeviceConnected = true,
Barcode = "PCB-SECOND"
};
ScanOperationResult result = DualScannerResultMerger.Merge(first, second);
Assert.True(result.IsSuccess);
Assert.Equal("PCB-SECOND", result.Barcode);
Assert.Contains("扫码枪2", result.RawMessage);
}
///
/// 两把扫码枪都成功但内容不一致时,应优先使用扫码枪1条码并保留不一致说明。
///
[Fact]
public void Merge_ShouldPreferFirstBarcode_WhenBothScannersReturnDifferentBarcodes()
{
var first = new ScanOperationResult
{
IsSuccess = true,
DeviceConnected = true,
Barcode = "PCB-FIRST"
};
var second = new ScanOperationResult
{
IsSuccess = true,
DeviceConnected = true,
Barcode = "PCB-SECOND"
};
ScanOperationResult result = DualScannerResultMerger.Merge(first, second);
Assert.True(result.IsSuccess);
Assert.Equal("PCB-FIRST", result.Barcode);
Assert.Contains("不一致", result.ErrorMessage);
Assert.Contains("PCB-SECOND", result.RawMessage);
}
}