public void SetValue_WhenCalled_SetsProperty()
        {
            var cache       = new ReflectiveCache();
            var basicObject = new DataStatusItem {
                DataItemID = 1, DataItemCurrentStatusID = 1, DataItemStatusID = 1, DateEffective = DateTime.Now
            };
            var type = cache.Get(basicObject);

            var prop = type.GetProperties().Where(x => x.Name == nameof(DataStatusItem.DataItemID)).First();

            prop.SetValue(basicObject, 2);

            Assert.AreEqual(2, basicObject.DataItemID);
        }
        public async Task VisitAsync_WhenGivenComplexObject_IsCalledCorrectNumberOfTimes()
        {
            var i       = 0;
            var visitor = new ReflectivePropertyVisitor <DataStatusItem>(x =>
            {
                i++;
                return(Task.CompletedTask);
            });

            var testObject = new
            {
                DataStatusItem = new List <DataStatusItem>
                {
                    new DataStatusItem {
                        DataItemID = 1, DataItemCurrentStatusID = 1, DataItemStatusID = 1, DateEffective = DateTime.Now
                    },
                    new DataStatusItem {
                        DataItemID = 2, DataItemCurrentStatusID = 2, DataItemStatusID = 2, DateEffective = DateTime.Now
                    },
                },
                MySubThingy = new
                {
                    AnotherSubThingy = new
                    {
                        Child = new DataStatusItem {
                        }
                    }
                },
                Brand            = 1,
                DataType         = 2,
                ProcessingStatus = 3,
                IntList          = new List <int> {
                    11,
                    22,
                    33
                }
            };

            var basicObject = new DataStatusItem {
                DataItemID = 1, DataItemCurrentStatusID = 1, DataItemStatusID = 1, DateEffective = DateTime.Now
            };

            await visitor.VisitAsync(testObject);

            await visitor.VisitAsync(basicObject);

            Assert.AreEqual(4, i);
        }