26ff8d9b4f
Set up repository with legacy .NET Framework 4.8 source (OLD/), new .NET 10 Blazor solution (NEW/), OpenSpec specifications, documentation, and project configuration.
280 lines
7.0 KiB
C#
280 lines
7.0 KiB
C#
using JdeScoping.DataAccess.Models.Results;
|
|
using Shouldly;
|
|
using Xunit;
|
|
|
|
namespace JdeScoping.DataAccess.Tests.Models;
|
|
|
|
/// <summary>
|
|
/// Unit tests for SearchResult InclusionReason property.
|
|
/// </summary>
|
|
public sealed class SearchResultTests
|
|
{
|
|
#region ManuallySpecified Priority Tests
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenManuallySpecified_ReturnsManuallySpecified()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = true,
|
|
Flagged = false,
|
|
Cardex = false,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ManuallySpecified");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_ManuallySpecified_TakesPriorityOverFlagged()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = true,
|
|
Flagged = true,
|
|
Cardex = false,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ManuallySpecified");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_ManuallySpecified_TakesPriorityOverCARDEX()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = true,
|
|
Flagged = false,
|
|
Cardex = true,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ManuallySpecified");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_ManuallySpecified_TakesPriorityOverAllOtherFlags()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = true,
|
|
Flagged = true,
|
|
Cardex = true,
|
|
PartsList = true,
|
|
SplitOrder = true
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ManuallySpecified");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Flagged Tests
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenFlagged_ReturnsFlagged()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = true,
|
|
Cardex = false,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("Flagged");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_Flagged_TakesPriorityOverCARDEX()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = true,
|
|
Cardex = true,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("Flagged");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region CARDEX and PartsList Tests
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenCARDEXAndPartsList_ReturnsCombinedMessage()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = false,
|
|
Cardex = true,
|
|
PartsList = true,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ComponentUsage (CARDEX + Parts List)");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenOnlyCARDEX_ReturnsCARDEXMessage()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = false,
|
|
Cardex = true,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ComponentUsage (CARDEX)");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenOnlyPartsList_ReturnsPartsListMessage()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = false,
|
|
Cardex = false,
|
|
PartsList = true,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ComponentUsage (Parts List)");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region SplitOrder Tests
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenSplitOrder_ReturnsSplitOrderMessage()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = false,
|
|
Cardex = false,
|
|
PartsList = false,
|
|
SplitOrder = true
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("Split order");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_CARDEXAndPartsList_TakePriorityOverSplitOrder()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = false,
|
|
Cardex = true,
|
|
PartsList = false,
|
|
SplitOrder = true
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("ComponentUsage (CARDEX)");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Unknown Fallback Tests
|
|
|
|
[Fact]
|
|
public void InclusionReason_WhenNoFlagsSet_ReturnsUnknown()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = false,
|
|
Flagged = false,
|
|
Cardex = false,
|
|
PartsList = false,
|
|
SplitOrder = false
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("UNKNOWN");
|
|
}
|
|
|
|
[Fact]
|
|
public void InclusionReason_DefaultRecord_ReturnsUnknown()
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult();
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe("UNKNOWN");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Priority Order Verification
|
|
|
|
[Theory]
|
|
[InlineData(true, true, true, true, true, "ManuallySpecified")]
|
|
[InlineData(false, true, true, true, true, "Flagged")]
|
|
[InlineData(false, false, true, true, true, "ComponentUsage (CARDEX + Parts List)")]
|
|
[InlineData(false, false, true, false, true, "ComponentUsage (CARDEX)")]
|
|
[InlineData(false, false, false, true, true, "ComponentUsage (Parts List)")]
|
|
[InlineData(false, false, false, false, true, "Split order")]
|
|
[InlineData(false, false, false, false, false, "UNKNOWN")]
|
|
public void InclusionReason_FollowsCorrectPriorityOrder(
|
|
bool manuallySpecified,
|
|
bool flagged,
|
|
bool cardex,
|
|
bool partsList,
|
|
bool splitOrder,
|
|
string expectedReason)
|
|
{
|
|
// Arrange
|
|
var result = new SearchResult
|
|
{
|
|
ManuallySpecified = manuallySpecified,
|
|
Flagged = flagged,
|
|
Cardex = cardex,
|
|
PartsList = partsList,
|
|
SplitOrder = splitOrder
|
|
};
|
|
|
|
// Act & Assert
|
|
result.InclusionReason.ShouldBe(expectedReason);
|
|
}
|
|
|
|
#endregion
|
|
}
|