Files
jdescopingtool/NEW/tests/JdeScoping.DataAccess.Tests/Models/SearchResultTests.cs
T
Joseph Doherty 26ff8d9b4f Initial commit: JDE Scoping Tool migration project
Set up repository with legacy .NET Framework 4.8 source (OLD/),
new .NET 10 Blazor solution (NEW/), OpenSpec specifications,
documentation, and project configuration.
2026-01-02 07:43:29 -05:00

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
}