public void translated_fields_should_change()
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();
                var metadata      = GetMockedMultiLanguageMetadata();

                context.InitializeMetadata(metadata);

                var preImageTheme = new opc_theme {
                    opc_islocalizable = true, opc_name = $"{Prefix}Technology|Technologee", opc_nameenglish = "Technology", opc_namefrench = "Technologee"
                };
                var targetTheme = new opc_theme {
                    opc_namefrench = "Technologie"
                };

                var previous = preImageTheme.opc_name;

                pluginContext.PreEntityImages.Add("PreImage", preImageTheme);
                pluginContext.InputParameters.Add(InputParameter.Target, targetTheme);
                pluginContext.MessageName = PluginMessage.Update;

                // Act
                context.ExecutePluginWith <MultiLanguagePlugin>(pluginContext);

                // Assert
                var expected = $"{Prefix}{string.Join(Separator, new[] { preImageTheme.opc_nameenglish, targetTheme.opc_namefrench })}";

                targetTheme.opc_name.Should().NotBe(previous);
                targetTheme.opc_name.Should().Be(expected);
            }
            public void translated_fields_should_contain_data()
            {
                // Arrange
                var context  = new XrmFakedContext();
                var metadata = GetMockedMultiLanguageMetadata();

                context.InitializeMetadata(metadata);

                var theme = new opc_theme {
                    opc_islocalizable = true, opc_nameenglish = "Technology", opc_namefrench = "Technologie"
                };

                // Act
                context.ExecutePluginWithTarget <MultiLanguagePlugin>(theme);

                // Assert
                var expected = $"{Prefix}{string.Join(Separator, new[] { theme.opc_nameenglish, theme.opc_namefrench })}";

                theme.opc_name.Should().Be(expected);
            }
            public void fields_should_be_english_when_the_ui_is_english()
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                var theme = new opc_theme {
                    opc_islocalizable = false, opc_name = $"{Prefix}Technology{Separator}Technologie"
                };
                var expected = theme.opc_name;

                pluginContext.OutputParameters.Add(OutputParameter.BusinessEntity, theme);
                pluginContext.MessageName = PluginMessage.Retrieve;
                pluginContext.SharedVariables.Add(LanguageKey, (int)Language.English);

                // Act
                context.ExecutePluginWith <MultiLanguagePlugin>(pluginContext);

                // Assert
                theme.opc_name.Should().Be(expected);
            }
            public void translated_fields_should_fallback_to_french_when_the_ui_is_english_and_the_value_is_empty()
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                var theme = new opc_theme {
                    opc_islocalizable = true, opc_name = $"{Prefix}{Separator}Technologie", opc_namefrench = "Technologie"
                };

                pluginContext.OutputParameters.Add(OutputParameter.BusinessEntity, theme);
                pluginContext.MessageName = PluginMessage.Retrieve;
                pluginContext.SharedVariables.Add(LanguageKey, (int)Language.English);

                // Act
                context.ExecutePluginWith <MultiLanguagePlugin>(pluginContext);

                // Assert
                var expected = theme.opc_namefrench;

                theme.opc_name.Should().Be(expected);
            }