package io.dropwizard.migrations; import com.google.common.collect.ImmutableMap; import net.sourceforge.argparse4j.inf.Namespace; import org.junit.Test; import org.skife.jdbi.v2.DBI; import org.skife.jdbi.v2.Handle; import net.jcip.annotations.NotThreadSafe; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import static org.assertj.core.api.Assertions.assertThat; @NotThreadSafe public class DbCommandTest extends AbstractMigrationTest { private final DbCommand<TestMigrationConfiguration> dbCommand = new DbCommand<>("db", new TestMigrationDatabaseConfiguration(), TestMigrationConfiguration.class, "migrations.xml"); @Test public void testRunSubCommand() throws Exception { final String databaseUrl = getDatabaseUrl(); final TestMigrationConfiguration conf = createConfiguration(databaseUrl); dbCommand.run(null, new Namespace(ImmutableMap.of("subcommand", "migrate")), conf); try (Handle handle = new DBI(databaseUrl, "sa", "").open()) { assertThat(handle.createQuery("select count(*) from persons") .mapTo(Integer.class) .first()).isEqualTo(1); } } @Test public void testPrintHelp() throws Exception { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); createSubparser(dbCommand).printHelp(new PrintWriter(new OutputStreamWriter(baos, UTF_8), true)); assertThat(baos.toString(UTF_8)).isEqualTo(String.format( "usage: db db [-h]%n" + " {calculate-checksum,clear-checksums,drop-all,dump,fast-forward,generate-docs,locks,migrate,prepare-rollback,rollback,status,tag,test}%n" + " ...%n" + "%n" + "Run database migration tasks%n" + "%n" + "positional arguments:%n" + " {calculate-checksum,clear-checksums,drop-all,dump,fast-forward,generate-docs,locks,migrate,prepare-rollback,rollback,status,tag,test}%n" + "%n" + "optional arguments:%n" + " -h, --help show this help message and exit%n")); } }