Skip to main content
Question

Unit Tests SelectFrom returning null for joined tables.


Forum|alt.badge.img

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


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings