public void OverrideDefaultVariablesFromProvider()
        {
            // arrange
            var builder = new MigratorBuilder();

            var providerMock = new Mock <IDbProvider>();

            providerMock
            .Setup(x => x.GetDefaultVariables())
            .Returns(() => new Dictionary <string, string>
            {
                { DefaultVariables.User, ProviderUserName },
                { DefaultVariables.DbName, ProviderDbName }
            });
            var factoryMock = new Mock <IDbProviderFactory>();

            factoryMock
            .Setup(x => x.CreateDbProvider())
            .Returns(() => providerMock.Object);

            IReadOnlyDictionary <string, string> scriptVariables = null;
            var migrationsProviderMock = new Mock <IMigrationsProvider>();

            migrationsProviderMock
            .Setup(x => x.GetMigrations(
                       It.IsAny <IDbProvider>(),
                       It.IsAny <Dictionary <string, string> >(),
                       It.IsAny <ILogger>()))
            .Callback <IDbProvider, IReadOnlyDictionary <string, string>, ILogger>((provider, variables, logger) => { scriptVariables = variables; })
            .Returns <IDbProvider, IReadOnlyDictionary <string, string>, ILogger>((provider, variables, logger) => new List <IMigration>(0));

            builder.UseCustomMigrationsProvider(migrationsProviderMock.Object);
            builder.UserDbProviderFactory(factoryMock.Object);
            builder.UseVariable(DefaultVariables.User, ManualUserName);

            // act
            var migrator = builder.Build();

            // assert
            migrator.Should().NotBeNull("because we've create migrator");

            scriptVariables.Should().NotBeNull("because provider returns 2 variables");
            scriptVariables.Count.Should().Be(2, "because provider returns variable with user and db names");
            scriptVariables.ContainsKey(DefaultVariables.User).Should().BeTrue("because user name is default variable");
            scriptVariables[DefaultVariables.User].Should().BeEquivalentTo(ManualUserName, "because we set it manually to builder");
            scriptVariables.ContainsKey(DefaultVariables.DbName).Should().BeTrue("because db name is default variable");
            scriptVariables[DefaultVariables.DbName].Should().BeEquivalentTo(ProviderDbName, "because we set it manually to mock");
        }