Question

Unit Tests SelectFrom returning null for joined tables.

  • 19 March 2024
  • 0 replies
  • 20 views

Userlevel 2
Badge

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?


0 replies

Be the first to reply!

Reply


About Acumatica ERP system
Acumatica Cloud ERP provides the best business management solution for transforming your company to thrive in the new digital economy. Built on a future-proof platform with open architecture for rapid integrations, scalability, and ease of use, Acumatica delivers unparalleled value to small and midmarket organizations. Connected Business. Delivered.
© 2008 — 2024  Acumatica, Inc. All rights reserved