94 lines
2.9 KiB
C#
94 lines
2.9 KiB
C#
using AxiOmron.PcbCheck.Models;
|
||
using AxiOmron.PcbCheck.Services.Implementations;
|
||
using Xunit;
|
||
|
||
namespace AxiOmron.PcbCheck.Tests;
|
||
|
||
/// <summary>
|
||
/// 验证双扫码枪结果汇总规则。
|
||
/// </summary>
|
||
public sealed class DualScannerResultMergerTests
|
||
{
|
||
/// <summary>
|
||
/// 任一扫码枪成功时,应使用成功条码继续后续 SFTP 流程。
|
||
/// </summary>
|
||
[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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 第一把扫码枪返回 noRead、第二把扫码枪返回有效条码时,应舍弃 noRead 并使用第二把扫码枪结果。
|
||
/// </summary>
|
||
[Fact]
|
||
public void Merge_ShouldUseSecondBarcode_WhenFirstScannerReturnsNoRead()
|
||
{
|
||
var first = new ScanOperationResult
|
||
{
|
||
IsSuccess = true,
|
||
DeviceConnected = true,
|
||
Barcode = "noRead",
|
||
RawMessage = "noRead"
|
||
};
|
||
var second = new ScanOperationResult
|
||
{
|
||
IsSuccess = true,
|
||
DeviceConnected = true,
|
||
Barcode = "PCB-SECOND",
|
||
RawMessage = "PCB-SECOND"
|
||
};
|
||
|
||
ScanOperationResult result = DualScannerResultMerger.Merge(first, second);
|
||
|
||
Assert.True(result.IsSuccess);
|
||
Assert.Equal("PCB-SECOND", result.Barcode);
|
||
Assert.Contains("使用扫码枪2", result.RawMessage);
|
||
Assert.DoesNotContain("使用扫码枪1", result.RawMessage);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 两把扫码枪都成功但内容不一致时,应优先使用扫码枪1条码并保留不一致说明。
|
||
/// </summary>
|
||
[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);
|
||
}
|
||
}
|