public async void UpsertUserTaskAsync_ShouldUpdatetheProperty()
        {
            bool IsTaskDoneAftereChange = false;

            List <BoolTypeUserTask> boolTypeUserList = new List <BoolTypeUserTask>();

            var userTask = new BoolTypeUserTask(taskHolder.Title);

            userTask.ParentTaskHolder = taskHolder;
            userTask.IsTaskDone       = false;

            var secondUserTask = new BoolTypeUserTask(taskHolder.Title);

            secondUserTask.ParentTaskHolder = taskHolder;
            secondUserTask.Date             = userTask.Date;
            secondUserTask.IsTaskDone       = true;

            if (databaseAccess is SqliteDataAccessSqliteCon databaseAccessSqlite)
            {
                await databaseAccessSqlite.InsertUserTaskAsync(userTask);

                await databaseAccessSqlite.UpsertUserTaskAsync(secondUserTask);

                boolTypeUserList = await databaseAccessSqlite.GetBoolTypeUserListAsync(userTask.DisplayTitle);

                IsTaskDoneAftereChange = boolTypeUserList[0].IsTaskDone;
            }

            Assert.Single(boolTypeUserList);
            Assert.True(IsTaskDoneAftereChange);
        }
        /// <summary>
        ///
        /// Check the DB and if the task not exist for today then  Assign new Task To Task List
        /// </summary>
        /// <returns></returns>
        public async Task AssignTodaysBoolTaskAsync()
        {
            if (TaskHolderList.Count == 0)
            {
                return;
            }

            var today = (int)DateTime.Now.DayOfWeek;

            foreach (var taskHolder in TaskHolderList)
            {
                var checkingDay = (0b00000001 << (today));

                if ((taskHolder.WeeklyRepeatPattern & checkingDay) > 0)
                {
                    var boolTypeTask = await DBAccess.GetTaskOnSpecificDateAsync(taskHolder.Title, DateTime.Now.ToString("G",
                                                                                                                         CultureInfo.CreateSpecificCulture("es-ES")));

                    if (boolTypeTask == null)
                    {
                        boolTypeTask = new BoolTypeUserTask(taskHolder.DisplayTitle);
                    }
                    else
                    {
                        boolTypeTask.DisplayTitle = taskHolder.DisplayTitle;
                    }

                    taskHolder.CurrentTaskList.Add(boolTypeTask);
                    boolTypeTask.ParentTaskHolder = taskHolder;
                    boolTypeTask.OnDataChanged   += UpdateCertainTask;
                    BoolTypeTaskList.Add(boolTypeTask);
                }
            }
        }
        private async Task <UserTask> BringSpecificTaskOnTaskHolderAsync(NormalTaskHolder taskHolder, DateTime date)
        {
            var boolTypeTask = await DBAccess.GetTaskOnSpecificDateAsync(taskHolder.Title, date.ToString("G",
                                                                                                         CultureInfo.CreateSpecificCulture("es-ES")));

            if (boolTypeTask == null)
            {
                boolTypeTask = new BoolTypeUserTask(taskHolder.DisplayTitle, date);
            }

            boolTypeTask.DisplayTitle     = taskHolder.DisplayTitle;
            boolTypeTask.ParentTaskHolder = taskHolder;
            boolTypeTask.OnDataChanged   += UpdateCertainTask;
            taskHolder.CurrentTaskList.Add(boolTypeTask);

            return(boolTypeTask);
        }
        public async void UpsertUserTaskAsync_ShouldInsertTheProperty()
        {
            List <BoolTypeUserTask> boolTypeUserList = new List <BoolTypeUserTask>();

            var userTask = new BoolTypeUserTask(taskHolder.Title);

            userTask.ParentTaskHolder = taskHolder;

            if (databaseAccess is SqliteDataAccessSqliteCon databaseAccessSqlite)
            {
                await databaseAccessSqlite.UpsertUserTaskAsync(userTask);

                boolTypeUserList = await databaseAccessSqlite.GetBoolTypeUserListAsync(userTask.DisplayTitle);
            }

            Assert.Equal(userTask.Date
                         , boolTypeUserList[0].Date);
        }
        public async void GetTaskOnCertainDate_ShouldReturnATask()
        {
            var userTask = new BoolTypeUserTask(taskHolder.Title);

            userTask.ParentTaskHolder = taskHolder;
            userTask.IsTaskDone       = true;

            BoolTypeUserTask retrunUserTask = new BoolTypeUserTask(taskHolder.Title);

            userTask.ParentTaskHolder = taskHolder;

            if (databaseAccess is SqliteDataAccessSqliteCon databaseAccessSqlite)
            {
                await databaseAccessSqlite.InsertUserTaskAsync(userTask);

                retrunUserTask = await databaseAccessSqlite.GetTaskOnSpecificDateAsync("Test", DateTime.Now.ToString("G",
                                                                                                                     CultureInfo.CreateSpecificCulture("es-ES")));
            }

            Assert.Equal(userTask.IsTaskDone, retrunUserTask.IsTaskDone);
            Assert.Equal(userTask.Date, retrunUserTask.Date);
        }
 /// <summary>
 /// Just Upsert The userTask (insert and if same date exist then Update on that row)
 /// </summary>
 /// <param name="userTask"></param>
 /// <returns></returns>
 public async Task UpdateTaskAsync(BoolTypeUserTask userTask)
 {
     await DBAccess.UpsertUserTaskAsync(userTask);
 }