private void SeedDataForPlant(PreservationContext dbContext, IServiceProvider scopeServiceProvider, string plant)
        {
            var knownData = new KnownTestData(plant);

            SeededData.Add(plant, knownData);
            dbContext.Seed(scopeServiceProvider, knownData);
        }
        public static void Seed(this PreservationContext dbContext, IServiceProvider serviceProvider, KnownTestData knownTestData)
        {
            var userProvider  = serviceProvider.GetRequiredService <CurrentUserProvider>();
            var plantProvider = serviceProvider.GetRequiredService <PlantProvider>();

            userProvider.SetCurrentUserOid(new Guid(_seederOid));
            plantProvider.SetPlant(knownTestData.Plant);

            /*
             * Add the initial seeder user. Don't do this through the UnitOfWork as this expects/requires the current user to exist in the database.
             * This is the first user that is added to the database and will not get "Created" and "CreatedBy" data.
             */
            var seeder = EnsureCurrentUserIsSeeded(dbContext, userProvider);

            var plant = plantProvider.Plant;

            var supplierModeA = SeedMode(dbContext, plant, KnownTestData.SupModeA, true);

            knownTestData.SupModeAId = supplierModeA.Id;
            knownTestData.SupModeBId = SeedMode(dbContext, plant, KnownTestData.SupModeB, true).Id;
            var otherMode = SeedMode(dbContext, plant, KnownTestData.OtherMode, false);

            knownTestData.OtherModeId = otherMode.Id;

            var responsible = SeedResponsible(dbContext, plant);

            var reqTypeA       = SeedReqType(dbContext, plant, KnownTestData.ReqTypeA);
            var reqDefANoField = SeedReqDef(dbContext, reqTypeA, KnownTestData.ReqDefInReqTypeANoField);

            var reqDefAWithAttachmentField = SeedReqDef(dbContext, reqTypeA, KnownTestData.ReqDefInReqTypeAWithAttachmentField);

            SeedAttachmentField(dbContext, reqDefAWithAttachmentField);

            var reqDefAWithInfoField = SeedReqDef(dbContext, reqTypeA, KnownTestData.ReqDefInReqTypeAWithInfoField);

            SeedInfoField(dbContext, reqDefAWithInfoField);

            var reqDefAWithCbField = SeedReqDef(dbContext, reqTypeA, KnownTestData.ReqDefInReqTypeAWithCbField);

            SeedCbField(dbContext, reqDefAWithCbField);

            var reqTypeB = SeedReqType(dbContext, plant, KnownTestData.ReqTypeB);

            SeedReqDef(dbContext, reqTypeB, KnownTestData.ReqDefInReqTypeB);

            var journeyWithTags       = SeedJourney(dbContext, plant, KnownTestData.TwoStepJourneyWithTags);
            var stepInJourneyWithTags = SeedStep(dbContext, journeyWithTags, KnownTestData.StepAInJourneyWithTags, supplierModeA, responsible);

            SeedStep(dbContext, journeyWithTags, KnownTestData.StepBInJourneyWithTags, otherMode, responsible);

            var journeyWithoutTags = SeedJourney(dbContext, plant, KnownTestData.JourneyNotInUse);

            SeedStep(dbContext, journeyWithoutTags, KnownTestData.StepInJourneyNotInUse, supplierModeA, responsible);

            var project = SeedProject(dbContext, plant);
            var standardTagReadyForBulkPreserveNotStarted = SeedStandardTag(dbContext, project, stepInJourneyWithTags, reqDefANoField);

            knownTestData.TagId_ForStandardTagReadyForBulkPreserve_NotStarted = standardTagReadyForBulkPreserveNotStarted.Id;

            var standardTagWithAttachmentRequirementStarted = SeedStandardTag(dbContext, project, stepInJourneyWithTags, reqDefAWithAttachmentField);

            standardTagWithAttachmentRequirementStarted.StartPreservation();
            dbContext.SaveChangesAsync().Wait();
            knownTestData.TagId_ForStandardTagWithAttachmentRequirement_Started = standardTagWithAttachmentRequirementStarted.Id;

            var standardTagWithInfoRequirementStarted = SeedStandardTag(dbContext, project, stepInJourneyWithTags, reqDefAWithInfoField);

            standardTagWithInfoRequirementStarted.StartPreservation();
            dbContext.SaveChangesAsync().Wait();
            knownTestData.TagId_ForStandardTagWithInfoRequirement_Started = standardTagWithInfoRequirementStarted.Id;

            var standardTagWithCbRequirementStarted = SeedStandardTag(dbContext, project, stepInJourneyWithTags, reqDefAWithCbField);

            standardTagWithCbRequirementStarted.StartPreservation();
            dbContext.SaveChangesAsync().Wait();
            knownTestData.TagId_ForStandardTagWithCbRequirement_Started = standardTagWithCbRequirementStarted.Id;

            var standardTagWithAttachmentsAndActionsStarted = SeedStandardTag(dbContext, project, stepInJourneyWithTags, reqDefANoField);

            standardTagWithAttachmentsAndActionsStarted.StartPreservation();
            knownTestData.TagId_ForStandardTagWithAttachmentsAndActionAttachments_Started = standardTagWithAttachmentsAndActionsStarted.Id;
            SeedTagAttachment(dbContext, standardTagWithAttachmentsAndActionsStarted);
            SeedTagAttachment(dbContext, standardTagWithAttachmentsAndActionsStarted);

            var standardTagAction = SeedAction(dbContext, standardTagWithAttachmentsAndActionsStarted);

            SeedActionAttachment(dbContext, standardTagAction);
            SeedActionAttachment(dbContext, standardTagAction);

            var closedStandardTagAction = SeedAction(dbContext, standardTagWithAttachmentsAndActionsStarted);

            closedStandardTagAction.Close(new DateTime(1971, 1, 1, 0, 0, 0, DateTimeKind.Utc), seeder);
            dbContext.SaveChangesAsync().Wait();

            var siteAreaTag = SeedSiteTag(dbContext, project, stepInJourneyWithTags, reqDefANoField);

            knownTestData.TagId_ForSiteAreaTagReadyForBulkPreserve_NotStarted = siteAreaTag.Id;

            var siteAreaTagWithAttachmentsAndActionAttachments = SeedSiteTag(dbContext, project, stepInJourneyWithTags, reqDefANoField);

            knownTestData.TagId_ForSiteAreaTagWithAttachmentsAndActionAttachments_NotStarted = siteAreaTagWithAttachmentsAndActionAttachments.Id;
            SeedTagAttachment(dbContext, siteAreaTagWithAttachmentsAndActionAttachments);
            SeedTagAttachment(dbContext, siteAreaTagWithAttachmentsAndActionAttachments);

            var closedAreaTagAction = SeedAction(dbContext, siteAreaTagWithAttachmentsAndActionAttachments);

            closedAreaTagAction.Close(new DateTime(1971, 1, 1, 0, 0, 0, DateTimeKind.Utc), seeder);
            dbContext.SaveChangesAsync().Wait();

            SeedActionAttachment(dbContext, closedAreaTagAction);
            SeedActionAttachment(dbContext, closedAreaTagAction);
            knownTestData.ActionId_ForActionWithAttachments_Closed = closedAreaTagAction.Id;
        }