public async Task ItemList_Delete_DoesDelete()
        {
            // Arrange
            var planning = new Planning
            {
                Description      = Guid.NewGuid().ToString(),
                Enabled          = true,
                RelatedEFormId   = 35,
                RelatedEFormName = Guid.NewGuid().ToString(),
                RepeatType       = RepeatType.Day,
                UpdatedByUserId  = 1,
                CreatedByUserId  = 1,
                RepeatEvery      = 1,
                DayOfMonth       = 1,
                RepeatUntil      = new DateTime(2050, 1, 1, 1, 1, 1),
                WorkflowState    = Constants.WorkflowStates.Created,
                DayOfWeek        = DayOfWeek.Friday,
                PlanningNumber   = "1",
                LocationCode     = "2",
            };
            await planning.Create(DbContext);

            var planingNameTranslations = new List <PlanningNameTranslation>()
            {
                new PlanningNameTranslation()
                {
                    Name     = Guid.NewGuid().ToString(),
                    Language = new Language()
                    {
                        LanguageCode = "da", Name = "Danish"
                    },
                    Planning = planning
                }
            };

            foreach (var translationModel in planingNameTranslations)
            {
                await translationModel.Create(DbContext);
            }

            // Act
            // planning = await DbContext.Plannings.AsNoTracking().FirstOrDefaultAsync();

            Assert.AreEqual(Constants.WorkflowStates.Created, planning.WorkflowState);

            await planning.Delete(DbContext);

            await planingNameTranslations[0].Delete(DbContext);
            var   plannings = DbContext.Plannings.AsNoTracking().ToList();
            var   planingNameTranslationsList = DbContext.PlanningNameTranslation
                                                .AsNoTracking()
                                                .Where(x => x.Planning.Id == plannings[0].Id)
                                                .ToList();
            var planningVersions = DbContext.PlanningVersions.AsNoTracking().ToList();
            var planingNameTranslationsListVersions = DbContext.PlanningNameTranslationVersions
                                                      .AsNoTracking()
                                                      .Where(x => x.PlanningNameTranslationId == planingNameTranslationsList[0].Id)
                                                      .ToList();

            // Assert
            Assert.AreEqual(1, plannings.Count);
            Assert.AreEqual(2, planningVersions.Count);
            Assert.AreEqual(1, planingNameTranslationsList.Count);
            Assert.AreEqual(2, planingNameTranslationsListVersions.Count);
            Assert.AreEqual(planingNameTranslationsList[0].Name, planingNameTranslations[0].Name);
            Assert.AreEqual(planning.Description, plannings[0].Description);
            Assert.AreEqual(planning.Enabled, plannings[0].Enabled);
            Assert.AreEqual(planning.RepeatType, plannings[0].RepeatType);
            Assert.AreEqual(planning.RelatedEFormId, plannings[0].RelatedEFormId);
            Assert.AreEqual(planning.RelatedEFormName, plannings[0].RelatedEFormName);
            Assert.AreEqual(planning.UpdatedByUserId, plannings[0].UpdatedByUserId);
            Assert.AreEqual(planning.CreatedByUserId, plannings[0].CreatedByUserId);
            Assert.AreEqual(planning.RepeatEvery, plannings[0].RepeatEvery);
            Assert.AreEqual(planning.RepeatUntil, plannings[0].RepeatUntil);
            Assert.AreEqual(planning.DayOfWeek, plannings[0].DayOfWeek);
            Assert.AreEqual(planning.DayOfMonth, plannings[0].DayOfMonth);
            Assert.AreEqual(Constants.WorkflowStates.Removed, plannings[0].WorkflowState);
            Assert.AreEqual(planning.Id, plannings[0].Id);
            Assert.AreEqual(planning.LocationCode, plannings[0].LocationCode);
            Assert.AreEqual(planning.PlanningNumber, plannings[0].PlanningNumber);
            Assert.AreEqual(2, plannings[0].Version);

            // Versions
            Assert.AreEqual(planingNameTranslations[0].Name, planingNameTranslationsListVersions[0].Name);
            Assert.AreEqual(planning.Description, planningVersions[0].Description);
            Assert.AreEqual(planning.Enabled, planningVersions[0].Enabled);
            Assert.AreEqual(planning.RepeatType, planningVersions[0].RepeatType);
            Assert.AreEqual(planning.RelatedEFormId, planningVersions[0].RelatedEFormId);
            Assert.AreEqual(planning.RelatedEFormName, planningVersions[0].RelatedEFormName);
            Assert.AreEqual(planning.UpdatedByUserId, planningVersions[0].UpdatedByUserId);
            Assert.AreEqual(planning.CreatedByUserId, planningVersions[0].CreatedByUserId);
            Assert.AreEqual(planning.RepeatEvery, planningVersions[0].RepeatEvery);
            Assert.AreEqual(planning.RepeatUntil, planningVersions[0].RepeatUntil);
            Assert.AreEqual(planning.DayOfWeek, planningVersions[0].DayOfWeek);
            Assert.AreEqual(planning.DayOfMonth, planningVersions[0].DayOfMonth);
            Assert.AreEqual(planning.Id, planningVersions[0].PlanningId);
            Assert.AreEqual(Constants.WorkflowStates.Created, planningVersions[0].WorkflowState);
            Assert.AreEqual(1, planningVersions[0].Version);
            Assert.AreEqual(planingNameTranslations[0].Name, planingNameTranslationsListVersions[1].Name);
            Assert.AreEqual(planning.Description, planningVersions[1].Description);
            Assert.AreEqual(planning.Enabled, planningVersions[1].Enabled);
            Assert.AreEqual(planning.RepeatType, planningVersions[1].RepeatType);
            Assert.AreEqual(planning.RelatedEFormId, planningVersions[1].RelatedEFormId);
            Assert.AreEqual(planning.RelatedEFormName, planningVersions[1].RelatedEFormName);
            Assert.AreEqual(planning.UpdatedByUserId, planningVersions[1].UpdatedByUserId);
            Assert.AreEqual(planning.CreatedByUserId, planningVersions[1].CreatedByUserId);
            Assert.AreEqual(planning.RepeatEvery, planningVersions[1].RepeatEvery);
            Assert.AreEqual(planning.RepeatUntil, planningVersions[1].RepeatUntil);
            Assert.AreEqual(planning.DayOfWeek, planningVersions[1].DayOfWeek);
            Assert.AreEqual(planning.Id, planningVersions[1].PlanningId);
            Assert.AreEqual(Constants.WorkflowStates.Removed, planningVersions[1].WorkflowState);
            Assert.AreEqual(2, planningVersions[1].Version);
        }
        private async Task DeleteOnePlanning(Planning planning)
        {
            var core = await _coreService.GetCore();

            await using var sdkDbContext = core.DbContextHelper.GetDbContext();
            var planningCases = await _dbContext.PlanningCases
                                .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                                .Where(x => x.PlanningId == planning.Id)
                                .ToListAsync();

            foreach (var planningCase in planningCases)
            {
                var planningCaseSites = await _dbContext.PlanningCaseSites
                                        .Where(x => x.PlanningCaseId == planningCase.Id).ToListAsync();

                foreach (var planningCaseSite in planningCaseSites
                         .Where(planningCaseSite => planningCaseSite.MicrotingSdkCaseId != 0)
                         .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed))
                {
                    var theCase =
                        await sdkDbContext.Cases.SingleOrDefaultAsync(x => x.Id == planningCaseSite.MicrotingSdkCaseId);

                    if (theCase != null)
                    {
                        if (theCase.MicrotingUid != null)
                        {
                            await core.CaseDelete((int)theCase.MicrotingUid);
                        }
                    }
                    else
                    {
                        var checkListSite =
                            await sdkDbContext.CheckListSites.SingleOrDefaultAsync(x =>
                                                                                   x.Id == planningCaseSite.MicrotingCheckListSitId);

                        if (checkListSite != null)
                        {
                            await core.CaseDelete(checkListSite.MicrotingUid);
                        }
                    }
                }
                // Delete planning case
                await planningCase.Delete(_dbContext);
            }

            var planningSites = await _dbContext.PlanningSites
                                .Where(x => x.PlanningId == planning.Id)
                                .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                                .ToListAsync();

            foreach (var planningSite in planningSites)
            {
                await planningSite.Delete(_dbContext);
            }

            var nameTranslationsPlanning =
                await _dbContext.PlanningNameTranslation
                .Where(x => x.Planning.Id == planning.Id)
                .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                .ToListAsync();

            foreach (var translation in nameTranslationsPlanning)
            {
                await translation.Delete(_dbContext);
            }

            // Delete planning
            await planning.Delete(_dbContext);
        }