public void CanValidatePostActionWithDefaultInstructionLocalization()
        {
            SimpleConfigModel baseConfig = new SimpleConfigModel()
            {
                Identity         = "Test",
                PostActionModels = new List <PostActionModel>
                {
                    new PostActionModel()
                    {
                        Id                    = "pa0",
                        Description           = "text",
                        ActionId              = Guid.NewGuid(),
                        ManualInstructionInfo = new List <ManualInstructionModel>()
                        {
                            new ManualInstructionModel(null, "my text")
                        }
                    },
                }
            };
            IEngineEnvironmentSettings environmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true);
            string tempFolder       = _environmentSettingsHelper.CreateTemporaryFolder();
            string localizationFile = string.Format(DefaultLocalizeConfigRelativePath, "de-DE");

            WriteFile(Path.Combine(tempFolder, localizationFile), "{ \"postActions/pa0/manualInstructions/default/text\": \"localized\" }", environmentSettings);

            using IMountPoint mountPoint = GetMountPointForPath(tempFolder, environmentSettings);

            var runnableProjectConfig = new RunnableProjectConfig(environmentSettings, A.Fake <IGenerator>(), baseConfig);
            var localizationModel     = LocalizationModelDeserializer.Deserialize(mountPoint.FileInfo(localizationFile) !);

            Assert.True(runnableProjectConfig.VerifyLocalizationModel(localizationModel));

            runnableProjectConfig.ConfigurationModel.Localize(localizationModel);
            runnableProjectConfig.PostActionModels.Single(model => model.Id == "pa0" && model.ManualInstructionInfo[0].Text == "localized");
        }
        public void CannotValidatePostActionWithExtraInstructionLocalization()
        {
            SimpleConfigModel baseConfig = new SimpleConfigModel()
            {
                Identity         = "Test",
                PostActionModels = new List <PostActionModel>
                {
                    new PostActionModel()
                    {
                        Id                    = "pa0",
                        Description           = "text",
                        ActionId              = Guid.NewGuid(),
                        ManualInstructionInfo = new List <ManualInstructionModel>()
                        {
                            new ManualInstructionModel("first", "my text"),
                            new ManualInstructionModel("second", "my text"),
                        }
                    },
                }
            };

            List <(LogLevel, string)>  loggedMessages      = new List <(LogLevel, string)>();
            InMemoryLoggerProvider     loggerProvider      = new InMemoryLoggerProvider(loggedMessages);
            IEngineEnvironmentSettings environmentSettings = _environmentSettingsHelper.CreateEnvironment(virtualize: true, addLoggerProviders: new[] { loggerProvider });
            string tempFolder           = _environmentSettingsHelper.CreateTemporaryFolder();
            string localizationFilename = string.Format(DefaultLocalizeConfigRelativePath, "de-DE");

            WriteFile(
                Path.Combine(tempFolder, localizationFilename),
                "{ \"postActions/pa0/manualInstructions/first/text\": \"localized\", \"postActions/pa0/manualInstructions/extra/text\": \"extraLoc\" }",
                environmentSettings);

            using IMountPoint mountPoint = GetMountPointForPath(tempFolder, environmentSettings);

            var templateConfig    = new RunnableProjectConfig(environmentSettings, A.Fake <IGenerator>(), baseConfig);
            var localizationFile  = mountPoint.FileInfo(localizationFilename);
            var localizationModel = LocalizationModelDeserializer.Deserialize(localizationFile !);

            Assert.False(templateConfig.VerifyLocalizationModel(localizationModel, localizationFile));

            var warningMessages = loggedMessages.Where(log => log.Item1 == LogLevel.Warning);

            Assert.Single(warningMessages);
            Assert.Contains(
                string.Format(LocalizableStrings.Authoring_InvalidManualInstructionLocalizationIndex, "extra", "pa0"),
                warningMessages.Single().Item2);
            Assert.Contains(localizationFilename, warningMessages.Single().Item2);
        }