public void Deserialize(IXunitSerializationInfo info)
        {
            String val = info.GetValue <String>("Value");
            UserHabitRecordsControllerTestData_MonthNoOfTimes other = JsonSerializer.Deserialize <UserHabitRecordsControllerTestData_MonthNoOfTimes>(val);

            DateInMonth       = other.DateInMonth;
            CompleteCondition = other.CompleteCondition;
            if (other.RecordDateList.Count > 0)
            {
                RecordDateList.AddRange(other.RecordDateList);
            }
            if (other.ExpectedRecordList.Count > 0)
            {
                ExpectedRecordList.AddRange(other.ExpectedRecordList);
            }
            if (other.RuleList.Count > 0)
            {
                RuleList.AddRange(other.RuleList);
            }
        }
        public async Task CalculatePoints(UserHabitRecordsControllerTestData_MonthNoOfTimes testData)
        {
            var context = this.fixture.GetCurrentDataContext();
            UserHabitRecordsController control = new(context);

            // Add Habit, Habit Rule
            UserHabit habit = new UserHabit();

            habit.TargetUser        = DataSetupUtility.UserA;
            habit.ValidFrom         = new DateTime(2021, 1, 1);
            habit.ValidTo           = new DateTime(2022, 12, 31);
            habit.Name              = "Habit_Monthly_1";
            habit.Category          = HabitCategory.Positive;
            habit.Comment           = habit.Name;
            habit.Frequency         = HabitFrequency.Monthly;
            habit.CompleteCategory  = HabitCompleteCategory.NumberOfTimes;
            habit.CompleteCondition = testData.CompleteCondition;
            habit.StartDate         = testData.DateInMonth;
            context.UserHabits.Add(habit);
            context.SaveChanges();
            Int32 nNewHabitID = habit.ID;

            foreach (var rule in testData.RuleList)
            {
                rule.HabitID = habit.ID;
                context.UserHabitRules.Add(rule);
            }
            context.SaveChanges();

            // Add user record.
            foreach (var nrecorddate in testData.RecordDateList)
            {
                var nrecord = new UserHabitRecord();
                nrecord.RecordDate = nrecorddate.Date;
                nrecord.HabitID    = habit.ID;
                nrecord.Comment    = "Test1";
                nrecord.SubID      = 1;
                var rst = control.Post(nrecord);
                Assert.NotNull(rst);
                if (rst != null)
                {
                    CreatedODataResult <UserHabitRecord> rstrecord = (CreatedODataResult <UserHabitRecord>)rst.Result;
                    Assert.NotNull(rstrecord);
                }
            }

            // Check on DB directly
            var dbrecords = (from dbrecord in context.UserHabitRecords
                             where dbrecord.HabitID == habit.ID
                             orderby dbrecord.RecordDate ascending
                             select dbrecord).ToList();

            Assert.Equal(testData.ExpectedRecordList.Count, dbrecords.Count);

            // Ensure rule is assigned correctly
            if (testData.ExpectedRecordList.Count > 0)
            {
                foreach (var dbrecord in dbrecords)
                {
                    var ridx = testData.ExpectedRecordList.FindIndex(rd => rd.RecordDate == dbrecord.RecordDate);
                    Assert.NotEqual(-1, ridx);

                    Assert.Equal(testData.ExpectedRecordList[ridx].RuleID, dbrecord.RuleID);
                    Assert.Equal(testData.ExpectedRecordList[ridx].ContinuousCount, dbrecord.ContinuousCount);
                }
            }

            DataSetupUtility.ClearUserHabitData(context, nNewHabitID);
            context.SaveChanges();

            await context.DisposeAsync();
        }