Files
Axi_Omron/tests/AxiOmron.PcbCheck.Tests/DualScannerResultMergerTests.cs

94 lines
2.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}