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.
This commit is contained in:
@@ -0,0 +1,279 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user