public void Load_Fills_Object_Correctly()
        {
            _fileManagerMock.ReadAllText("migratio.yml", configContent);
            var sut = new ConfigurationManager(_fileManagerMock.Object);

            var result = sut.Load("migratio.yml");

            Assert.True(result);

            var config = sut.Config;

            Assert.Equal("/dev/migrations", config.Directories.Base);
            Assert.Equal("/dev/migrations/rollout", config.Directories.Rollout);
            Assert.Equal("/dev/migrations/rollback", config.Directories.Rollback);
            Assert.Equal("/dev/migrations/seeders", config.Directories.Seeders);
            Assert.Equal("MG_DB_PASSWORD", config.EnvMapping.FirstOrDefault().Key);
            Assert.Equal("DB_USERNAME", config.EnvMapping.FirstOrDefault().Value);
            Assert.Equal("./backend.env", config.EnvFile);
            Assert.Equal("TestDB", config.Auth.Postgres.Database);
            Assert.Equal("localhost", config.Auth.Postgres.Host);
            Assert.Equal(1234, config.Auth.Postgres.Port);
            Assert.Equal("postgres", config.Auth.Postgres.Username);
            Assert.Equal("${{MG_DB_PASSWORD}}", config.Auth.Postgres.Password);
            Assert.True(config.ReplaceVariables);
        }
Exemplo n.º 2
0
        public void InvokeMgRollback_Rollbacks_Correct_Migrations()
        {
            ConfigManagerMock.ConfigReturns(null);
            DbMock.MigrationTableExists(true);
            DbMock.GetLatestIteration(1);
            DbMock.GetAppliedScriptsForLatestIteration(new[]
            {
                new Migration {
                    Iteration = 1, MigrationId = "two"
                },
                new Migration {
                    Iteration = 1, MigrationId = "three"
                },
            });
            FileManagerMock.GetAllFilesInFolder(new[]
            {
                "migrations/rollback/one.sql",
                "migrations/rollback/two.sql",
                "migrations/rollback/three.sql",
            });
            ConfigManagerMock.RollbackDirectory("migrations/rollback");
            FileManagerMock.ReadAllText("migrations/rollback/two.sql", "rollback 2");
            FileManagerMock.ReadAllText("migrations/rollback/three.sql", "rollback 3");
            DbMock.RunTransactionAny(1);

            var command = new InvokeMgRollback(GetMockedDependencies())
            {
                Database = "database",
                Host     = "host",
                Port     = 1111,
                Schema   = "public",
                Username = "******"
            };

            var result = command.Invoke()?.OfType <string>().ToArray();

            Assert.Contains("Found 2 migrations applied in iteration 1", result);
            Assert.Contains("Migration one was not applied in latest iteration, skipping", result);
            Assert.Contains("Adding rollback of migration: two to transaction", result);
            FileManagerMock.VerifyReadAllText("migrations/rollback/one.sql", Times.Never());

            var transactions =
                "rollback 2;" + Environment.NewLine +
                "DELETE FROM \"public\".\"MIGRATIONS\" WHERE \"MIGRATION_ID\" = 'two' AND \"ITERATION\" = '1';" +
                Environment.NewLine + "rollback 3;" + Environment.NewLine +
                "DELETE FROM \"public\".\"MIGRATIONS\" WHERE \"MIGRATION_ID\" = 'three' AND \"ITERATION\" = '1';" +
                Environment.NewLine;


            DbMock.VerifyRunTransaction(transactions);
        }
        public void GetMgUsedVariables_Returns_Correct_Variables()
        {
            FileManagerMock.FileExists("migrations/rollout/one.sql", true);
            FileManagerMock.ReadAllText("migrations/rollout/one.sql", "SELECT ${{VAR_ME}} FROM ${{VAR_YOU}}");

            var command = new GetMgUsedVariables(GetMockedDependencies())
            {
                MigrationFile = "migrations/rollout/one.sql"
            };

            var result = command.Invoke()?.OfType <string[]>()?.First();

            Assert.Equal(new[] { "VAR_ME", "VAR_YOU" }, result);
        }
        public void GetMgUsedVariables_Returns_Empty_When_No_Variables_Is_Used()
        {
            FileManagerMock.FileExists("migrations/rollout/one.sql", true);
            FileManagerMock.ReadAllText("migrations/rollout/one.sql", "SELECT ME FROM YOU");

            var command = new GetMgUsedVariables(GetMockedDependencies())
            {
                MigrationFile = "migrations/rollout/one.sql"
            };

            var result = command.Invoke()?.OfType <string[]>()?.First();

            Assert.Empty(result);
        }