using JdeScoping.DataAccess.Models.Results; using Shouldly; using Xunit; namespace JdeScoping.DataAccess.Tests.Models; /// /// Unit tests for SearchResult InclusionReason property. /// 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 }