Hi Everyone,
I'm having issues writing tests for code that use SelectFrom.
I’m trying to set up a Unit test for the below method.
public static List<KitSpec> GetKitSpecs(PXGraph graph, int? InventoryID)
{
var ksl = new List<KitSpec>();
var result = SelectFrom<INKitSpecStkDet>.
InnerJoin<INKitSpecHdr>.On<INKitSpecHdr.revisionID.IsEqual<INKitSpecStkDet.revisionID>
.And<INKitSpecHdr.kitInventoryID.IsEqual<INKitSpecStkDet.kitInventoryID>>>.
InnerJoin<InventoryItem>.On<InventoryItem.inventoryID.IsEqual<INKitSpecStkDet.compInventoryID>>.
Where<INKitSpecStkDet.kitInventoryID.IsEqual<@P.AsInt>.
And<INKitSpecHdr.isActive.IsEqual<@P.AsBool>>.
And<INKitSpecHdrExt.usrMAXXINDefault.IsEqual<@P.AsBool>>>.
AggregateTo<GroupBy<INKitSpecStkDet.compInventoryID>>.
View.Select(graph, InventoryID,true);
foreach (PXResult<INKitSpecStkDet, INKitSpecHdr, InventoryItem> record in result)
{
INKitSpecStkDet kitDetail = (INKitSpecStkDet)record;
InventoryItem inventoryItem = (InventoryItem)record;
InventoryItemExt inventoryItemExt = inventoryItem.GetExtension<InventoryItemExt>();
ksl.Add(new KitSpec(graph,kitDetail.CompInventoryID, kitDetail.DfltCompQty, inventoryItem.KitItem, kitDetail.UOM,inventoryItemExt.UsrMAXXINPreferredPurchaseItem));
}
return ksl;
}
Here is my test
[Fact]
public void KitSpecs_GetKitSpecs_ShouldReturnCorrectItems()
{
// Arrange
var graph = PXGraph.CreateInstance<InventoryItemMaint>();
InsertINUnit(graph, "EACH");
// Add 4 Inventory Items
// Item 1 is a Kit that is not the preffered purchasing Item
InventoryItem item1 = (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new InventoryItem
{
InventoryCD = "A",
KitItem = true,
BaseUnit = "EACH",
});
InventoryItemExt item1Ext = item1.GetExtension<InventoryItemExt>();
item1Ext.UsrMAXXINPreferredPurchaseItem = false;
graph.Caches[typeof(InventoryItem)].Update(item1);
// Item 2 is a Kit that is the preffered purchasing Item
InventoryItem item2 = (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new InventoryItem
{
InventoryCD = "B",
KitItem = true,
BaseUnit = "EACH"
});
InventoryItemExt item2Ext = item2.GetExtension<InventoryItemExt>();
item2Ext.UsrMAXXINPreferredPurchaseItem = true;
graph.Caches[typeof(InventoryItem)].Update(item2);
// Item 3 is a component item
InventoryItem item3 = (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new InventoryItem
{
InventoryCD = "C",
KitItem = false,
BaseUnit = "EACH"
});
// Item 4 is a component item
InventoryItem item4 = (InventoryItem)graph.Caches[typeof(InventoryItem)].Insert(new InventoryItem
{
InventoryCD = "D",
KitItem = false,
BaseUnit = "EACH"
});
// Add 2 Kit Specs
// Add a Kit Spec for Item 1
INKitSpecHdr kit1 = (INKitSpecHdr)graph.Caches[typeof(INKitSpecHdr)].Insert(new INKitSpecHdr
{
KitInventoryID = item1.InventoryID,
RevisionID = "A",
IsActive = true,
});
// Add Detail Lines
graph.Caches[typeof(INKitSpecStkDet)].Insert(new INKitSpecStkDet
{
RevisionID = kit1.RevisionID,
KitInventoryID = kit1.KitInventoryID,
LineNbr = 1,
CompInventoryID = item3.InventoryID,
DfltCompQty = 2,
UOM = "EACH"
});
graph.Caches[typeof(INKitSpecStkDet)].Insert(new INKitSpecStkDet
{
RevisionID = kit1.RevisionID,
KitInventoryID = kit1.KitInventoryID,
LineNbr = 2,
CompInventoryID = item4.InventoryID,
DfltCompQty = 1,
UOM = "EACH"
});
graph.Caches[typeof(INKitSpecStkDet)].Insert(new INKitSpecStkDet
{
RevisionID = kit1.RevisionID,
KitInventoryID = kit1.KitInventoryID,
LineNbr = 3,
CompInventoryID = item2.InventoryID,
DfltCompQty = 1,
UOM = "EACH"
});
INKitSpecHdrExt kit1Ext = kit1.GetExtension<INKitSpecHdrExt>();
kit1Ext.UsrMAXXINDefault = true;
graph.Caches[typeof(INKitSpecHdr)].Update(kit1);
// Add a kit Spec A for item 2 this is the Default Spec
INKitSpecHdr kit2A = (INKitSpecHdr)graph.Caches[typeof(INKitSpecHdr)].Insert(new INKitSpecHdr
{
KitInventoryID = item2.InventoryID,
RevisionID = "A",
IsActive = true,
}
);
// Add Detail Lines
graph.Caches[typeof(INKitSpecStkDet)].Insert(new INKitSpecStkDet
{
RevisionID = kit2A.RevisionID,
KitInventoryID = kit2A.KitInventoryID,
LineNbr = 1,
CompInventoryID = item3.InventoryID,
DfltCompQty = 2,
UOM = "EACH"
});
graph.Caches[typeof(INKitSpecStkDet)].Insert(new INKitSpecStkDet
{
RevisionID = kit2A.RevisionID,
KitInventoryID = kit2A.KitInventoryID,
LineNbr = 2,
CompInventoryID = item4.InventoryID,
DfltCompQty = 1,
UOM = "EACH"
});
INKitSpecHdrExt kit2AExt = kit2A.GetExtension<INKitSpecHdrExt>();
kit2AExt.UsrMAXXINDefault = true;
graph.Caches[typeof(INKitSpecHdr)].Update(kit2A);
// Add a kit Spec B for item 2 this is NOT the Default Spec
INKitSpecHdr kit2B = (INKitSpecHdr)graph.Caches[typeof(INKitSpecHdr)].Insert(new INKitSpecHdr
{
KitInventoryID = item2.InventoryID,
RevisionID = "B",
IsActive = true,
}
);
// Add Detail Lines
graph.Caches[typeof(INKitSpecStkDet)].Insert(new INKitSpecStkDet
{
RevisionID = kit2B.RevisionID,
KitInventoryID = kit2B.KitInventoryID,
LineNbr = 1,
CompInventoryID = item3.InventoryID,
DfltCompQty = 100,
UOM = "EACH"
});
INKitSpecHdrExt kit2BExt = kit2B.GetExtension<INKitSpecHdrExt>();
kit2BExt.UsrMAXXINDefault = false;
graph.Caches[typeof(INKitSpecHdr)].Update(kit2B);
// Act
// Assert
List<KitSpec> item1KitSpecs = KitSpec.GetKitSpecs(graph, item1.InventoryID);
List<KitSpec> item2KitSpecs = KitSpec.GetKitSpecs(graph, item2.InventoryID);
KitSpec nestedItem2 = item1KitSpecs.Find(i => i.InventoryID == item2.InventoryID);
Assert.Equal(3,item1KitSpecs.Count);
Assert.True(nestedKitItem2 != null, "KitSpecDet for Item 2 is missing from item1 KitSpecs");
Assert.True(nestedKitItem2.IsKit, "KitSpecDet for Item 2 is not marked as a Kit");
The test is failing the third assert statement.
When I debug the test in the foreach loop of the code INKitSpecHdr and InventoryItem are present however all of their properties are null. INKistSpecStkDet is behaving as I would expect.


Does anyone know what I’ve done wrong here?