public void TestConfigurationXmlShouldConfigureDeployerCorrectly()
        {
            var connections = new[]
            {
                new DatabaseEndpoint()
                {
                    DatabaseName = "Db1", ServerName = "Server1"
                },
            };

            var arguments = new Arguments()
            {
                Database = new DatabaseEndpoints()
                {
                    Endpoints = connections
                },
                DeployedAssemblyOverridePath     = @"c:\some dir\some other dir\MyAssembly1.dll",
                TargetAssemblyPath               = @".\MyAssembly1.dll",
                RunServerMigrationsInTransaction = false,
                Mode = DeploymentMode.MigrationOnly
            };

            var expectedConfig = new DeploymentConfiguration()
            {
                MigrationConfigurationInfo = new MigrationConfigurationInfo
                {
                    Type = "Galen.Enterprise.Security.Core.Data.Migrations.SecurityDbContext.Configuration"
                },

                InitializerConfigurationInfo = new InitializerConfigurationInfo
                {
                    Type = "Galen.Enterprise.Security.Core.Data.Initializers.SecurityDbContextCreateIfNotExistsWithTestData",
                    DisableForcedSeeding = true,
                    ServiceAccount       = new ServiceAccountInfo()
                    {
                        Name                 = "EnterpriseServiceAccount",
                        AccountType          = "Sql",
                        DatabaseUser         = "******",
                        DatabaseUserPassword = "******",
                    }
                }
            };

            var sut = new ConfigurationArgumentMapper(new DeploymentConfigurationXmlStore(ResourceHelper.ReadStream(
                                                                                              "Galen.Ci.EntityFramework.Deployer.Tests.Data.TestConfiguration.xml")));
            var actualConfig = sut.FromArguments(arguments);

            Assert.IsNotNull(actualConfig);
            Assert.IsNotNull(actualConfig.InitializationConfig);

            Assert.IsNotNull(actualConfig.MigrationConfig);
            Assert.AreEqual(expectedConfig.MigrationConfigurationInfo.Type, actualConfig.MigrationConfig.Type);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.Type, actualConfig.InitializationConfig.Type);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.DisableForcedSeeding, actualConfig.InitializationConfig.DisableForcedSeeding);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.Name, actualConfig.InitializationConfig.ServiceAccount.Name);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.Domain, actualConfig.InitializationConfig.ServiceAccount.Domain);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.DatabaseUser, actualConfig.InitializationConfig.ServiceAccount.DatabaseUser);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.AccountType, actualConfig.InitializationConfig.ServiceAccount.AccountType);
            Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.DatabaseUserPassword, actualConfig.InitializationConfig.ServiceAccount.DatabaseUserPassword);
        }
		public void ArgumentsShouldBeCorrectlyMappedToConfiguration()
		{
			var connections = new[]
			{
				new DatabaseEndpoint() {DatabaseName = "Db1", ServerName = "Server1"}
			};

			var arguments = new Arguments()
			{
				Database=new DatabaseEndpoints()
				{
					Endpoints=connections
				},
				DeployedAssemblyOverridePath=@"c:\some dir\some other dir\MyAssembly1.dll",
				TargetAssemblyPath=@".\MyAssembly1.dll",
				RunServerMigrationsInTransaction=false,
				Mode=DeploymentMode.MigrationOnly,
                DeploymentHistoryExtractPath=@"c:\some dir\deployment history"
			};

			var migration = new MigrationConfigurationInfo
			{
				Type = "Galen.Enterprise.Data.MigrationConfigs.SomeContext.Configuration"
			};

			var initializer = new InitializerConfigurationInfo
			{
				Type = "Galen.Enterprise.Data.Initializers.SomeContextCreateDatabaseIfNotExists",
				ServiceAccount = new ServiceAccountInfo()
				{
					Name = "SomeWindowsAccountName",
					Domain = "SomeDomainName",
					DatabaseUser = "******",
					AccountType = "Windows"

				}
			};

			var mockConfigStore = new Moq.Mock<IDeploymentConfigurationStore>();
			mockConfigStore.Setup(m => m.Load())
				.Returns(new DeploymentConfiguration()
				{
					MigrationConfigurationInfo=migration,
					InitializerConfigurationInfo=initializer
				});

			var expected = new DbDeploymentManagerConfiguration
			{
				Database=connections.First(),
				MigrationConfig=migration,
				InitializationConfig=initializer,
				DeployedAssemblyOverridePath=@"c:\some dir\some other dir\MyAssembly1.dll",
				TargetAssemblyPath=@".\MyAssembly1.dll",
				RunServerMigrationsInTransaction=false,
				Mode=DeploymentMode.MigrationOnly,
				AuthMode=AuthenticationMode.Integrated,
                DeploymentHistoryExtractPath = @"c:\some dir\deployment history"
            };

			var sut = new ConfigurationArgumentMapper(mockConfigStore.Object);
			var actual = sut.FromArguments(arguments);

			Assert.IsNotNull(actual);
			Assert.AreEqual(expected.DeployedAssemblyOverridePath, actual.DeployedAssemblyOverridePath);
			Assert.AreEqual(expected.TargetAssemblyPath, actual.TargetAssemblyPath);
			Assert.AreEqual(expected.RunServerMigrationsInTransaction, actual.RunServerMigrationsInTransaction);
			Assert.AreEqual(expected.Mode, actual.Mode);
		    Assert.AreEqual(expected.DeploymentHistoryExtractPath, actual.DeploymentHistoryExtractPath);
			Assert.IsNull(actual.SqlLogin);
			Assert.IsNull(actual.SqlPassword);

			Assert.IsNotNull(actual.Database);
            Assert.AreEqual(expected.Database.ServerName, actual.Database.ServerName);
            Assert.AreEqual(expected.Database.DatabaseName, actual.Database.DatabaseName);

			Assert.IsNotNull(actual.MigrationConfig);
            Assert.AreEqual(migration.Type, actual.MigrationConfig.Type);

			Assert.IsNotNull(actual.InitializationConfig);
			Assert.IsNotNull(actual.InitializationConfig.ServiceAccount);
			Assert.AreEqual(initializer.Type, actual.InitializationConfig.Type);
			Assert.AreEqual(initializer.ServiceAccount.AccountType, actual.InitializationConfig.ServiceAccount.AccountType);
			Assert.AreEqual(initializer.ServiceAccount.Name, actual.InitializationConfig.ServiceAccount.Name);
			Assert.AreEqual(initializer.ServiceAccount.Domain, actual.InitializationConfig.ServiceAccount.Domain);
			Assert.AreEqual(initializer.ServiceAccount.DatabaseUser, actual.InitializationConfig.ServiceAccount.DatabaseUser);
			Assert.AreEqual(initializer.ServiceAccount.DatabaseUserPassword, actual.InitializationConfig.ServiceAccount.DatabaseUserPassword);
		}
		public void TestConfigurationXmlShouldConfigureDeployerCorrectly()
		{
			var connections = new[]
			{
				new DatabaseEndpoint() {DatabaseName = "Db1", ServerName = "Server1"},
			};

			var arguments = new Arguments()
			{
				Database=new DatabaseEndpoints()
				{
					Endpoints=connections
				},
				DeployedAssemblyOverridePath=@"c:\some dir\some other dir\MyAssembly1.dll",
				TargetAssemblyPath=@".\MyAssembly1.dll",
				RunServerMigrationsInTransaction=false,
				Mode=DeploymentMode.MigrationOnly
			};

			var expectedConfig = new DeploymentConfiguration()
			{
				MigrationConfigurationInfo=new MigrationConfigurationInfo
				{
					Type = "Galen.Enterprise.Security.Core.Data.Migrations.SecurityDbContext.Configuration"
				},

				InitializerConfigurationInfo=new InitializerConfigurationInfo
				{
					Type = "Galen.Enterprise.Security.Core.Data.Initializers.SecurityDbContextCreateIfNotExistsWithTestData",
					DisableForcedSeeding = true,
					ServiceAccount = new ServiceAccountInfo()
					{
						Name = "EnterpriseServiceAccount",
						AccountType = "Sql",
						DatabaseUser = "******",
						DatabaseUserPassword = "******",
					}
				}
			};

			var sut = new ConfigurationArgumentMapper(new DeploymentConfigurationXmlStore(ResourceHelper.ReadStream(
				"Galen.Ci.EntityFramework.Deployer.Tests.Data.TestConfiguration.xml")));
			var actualConfig = sut.FromArguments(arguments);

			Assert.IsNotNull(actualConfig);
			Assert.IsNotNull(actualConfig.InitializationConfig);

		    Assert.IsNotNull(actualConfig.MigrationConfig);
		    Assert.AreEqual(expectedConfig.MigrationConfigurationInfo.Type, actualConfig.MigrationConfig.Type);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.Type, actualConfig.InitializationConfig.Type);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.DisableForcedSeeding, actualConfig.InitializationConfig.DisableForcedSeeding);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.Name, actualConfig.InitializationConfig.ServiceAccount.Name);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.Domain, actualConfig.InitializationConfig.ServiceAccount.Domain);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.DatabaseUser, actualConfig.InitializationConfig.ServiceAccount.DatabaseUser);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.AccountType, actualConfig.InitializationConfig.ServiceAccount.AccountType);
			Assert.AreEqual(expectedConfig.InitializerConfigurationInfo.ServiceAccount.DatabaseUserPassword, actualConfig.InitializationConfig.ServiceAccount.DatabaseUserPassword);
		}
        public void ArgumentsShouldBeCorrectlyMappedToConfiguration()
        {
            var connections = new[]
            {
                new DatabaseEndpoint()
                {
                    DatabaseName = "Db1", ServerName = "Server1"
                }
            };

            var arguments = new Arguments()
            {
                Database = new DatabaseEndpoints()
                {
                    Endpoints = connections
                },
                DeployedAssemblyOverridePath     = @"c:\some dir\some other dir\MyAssembly1.dll",
                TargetAssemblyPath               = @".\MyAssembly1.dll",
                RunServerMigrationsInTransaction = false,
                Mode = DeploymentMode.MigrationOnly,
                DeploymentHistoryExtractPath = @"c:\some dir\deployment history"
            };

            var migration = new MigrationConfigurationInfo
            {
                Type = "Galen.Enterprise.Data.MigrationConfigs.SomeContext.Configuration"
            };

            var initializer = new InitializerConfigurationInfo
            {
                Type           = "Galen.Enterprise.Data.Initializers.SomeContextCreateDatabaseIfNotExists",
                ServiceAccount = new ServiceAccountInfo()
                {
                    Name         = "SomeWindowsAccountName",
                    Domain       = "SomeDomainName",
                    DatabaseUser = "******",
                    AccountType  = "Windows"
                }
            };

            var mockConfigStore = new Moq.Mock <IDeploymentConfigurationStore>();

            mockConfigStore.Setup(m => m.Load())
            .Returns(new DeploymentConfiguration()
            {
                MigrationConfigurationInfo   = migration,
                InitializerConfigurationInfo = initializer
            });

            var expected = new DbDeploymentManagerConfiguration
            {
                Database                         = connections.First(),
                MigrationConfig                  = migration,
                InitializationConfig             = initializer,
                DeployedAssemblyOverridePath     = @"c:\some dir\some other dir\MyAssembly1.dll",
                TargetAssemblyPath               = @".\MyAssembly1.dll",
                RunServerMigrationsInTransaction = false,
                Mode     = DeploymentMode.MigrationOnly,
                AuthMode = AuthenticationMode.Integrated,
                DeploymentHistoryExtractPath = @"c:\some dir\deployment history"
            };

            var sut    = new ConfigurationArgumentMapper(mockConfigStore.Object);
            var actual = sut.FromArguments(arguments);

            Assert.IsNotNull(actual);
            Assert.AreEqual(expected.DeployedAssemblyOverridePath, actual.DeployedAssemblyOverridePath);
            Assert.AreEqual(expected.TargetAssemblyPath, actual.TargetAssemblyPath);
            Assert.AreEqual(expected.RunServerMigrationsInTransaction, actual.RunServerMigrationsInTransaction);
            Assert.AreEqual(expected.Mode, actual.Mode);
            Assert.AreEqual(expected.DeploymentHistoryExtractPath, actual.DeploymentHistoryExtractPath);
            Assert.IsNull(actual.SqlLogin);
            Assert.IsNull(actual.SqlPassword);

            Assert.IsNotNull(actual.Database);
            Assert.AreEqual(expected.Database.ServerName, actual.Database.ServerName);
            Assert.AreEqual(expected.Database.DatabaseName, actual.Database.DatabaseName);

            Assert.IsNotNull(actual.MigrationConfig);
            Assert.AreEqual(migration.Type, actual.MigrationConfig.Type);

            Assert.IsNotNull(actual.InitializationConfig);
            Assert.IsNotNull(actual.InitializationConfig.ServiceAccount);
            Assert.AreEqual(initializer.Type, actual.InitializationConfig.Type);
            Assert.AreEqual(initializer.ServiceAccount.AccountType, actual.InitializationConfig.ServiceAccount.AccountType);
            Assert.AreEqual(initializer.ServiceAccount.Name, actual.InitializationConfig.ServiceAccount.Name);
            Assert.AreEqual(initializer.ServiceAccount.Domain, actual.InitializationConfig.ServiceAccount.Domain);
            Assert.AreEqual(initializer.ServiceAccount.DatabaseUser, actual.InitializationConfig.ServiceAccount.DatabaseUser);
            Assert.AreEqual(initializer.ServiceAccount.DatabaseUserPassword, actual.InitializationConfig.ServiceAccount.DatabaseUserPassword);
        }