1618b6664d
Remove legacy JDE and CMS direct-access code that is no longer used: - Delete ICmsDataSource, IJdeDataSource interfaces - Delete ISearchProcessor, IUpdateProcessor interfaces - Delete IJdeRepository and ICmsRepository (all partials) - Delete JdeRepository and CmsRepository implementations - Delete JdeQueries and CmsQueries - Delete JdeFileDataSource, JdeOracleDataSource - Delete CmsFileDataSource, CmsOracleDataSource - Remove unused methods from LotFinderRepository interfaces - Delete associated unit tests (CmsRepositoryTests, JdeRepositoryTests) All data sync now uses ETL pipelines via DataSync project.
280 lines
7.0 KiB
C#
280 lines
7.0 KiB
C#
using JdeScoping.Core.Models.SearchResults;
|
|
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
|
|
}
|