Package com.dbdeploy.appliers

Source Code of com.dbdeploy.appliers.DirectToDbApplierTest

package com.dbdeploy.appliers;

import com.dbdeploy.database.QueryStatementSplitter;
import com.dbdeploy.database.changelog.DatabaseSchemaVersionManager;
import com.dbdeploy.database.changelog.QueryExecuter;
import com.dbdeploy.exceptions.ChangeScriptFailedException;
import com.dbdeploy.scripts.ChangeScript;
import com.dbdeploy.scripts.StubChangeScript;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnit44Runner;

import java.sql.SQLException;
import java.util.Arrays;

import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.*;

@RunWith(MockitoJUnit44Runner.class)
public class DirectToDbApplierTest {
  @Mock private QueryExecuter queryExecuter;
  @Mock private DatabaseSchemaVersionManager schemaVersionManager;
    @Mock private QueryStatementSplitter splitter;
  private DirectToDbApplier applier;

  @Before
  public void setUp() {
    applier = new DirectToDbApplier(queryExecuter, schemaVersionManager, splitter);
  }
 
  @Test
  public void shouldSetConnectionToManualCommitModeAtStart() throws Exception {
    applier.begin();

    verify(queryExecuter).setAutoCommit(false);
  }

  @Test
  public void shouldApplyChangeScriptBySplittingContentUsingTheSplitter() throws Exception {
        when(splitter.split("split; content")).thenReturn(Arrays.asList("split", "content"));

    applier.applyChangeScript(new StubChangeScript(1, "script", "split; content"));
   
    verify(queryExecuter).execute("split");
    verify(queryExecuter).execute("content");
  }

  @Test
  public void shouldRethrowSqlExceptionsWithInformationAboutWhatStringFailed() throws Exception {
    when(splitter.split("split; content")).thenReturn(Arrays.asList("split", "content"));
    ChangeScript script = new StubChangeScript(1, "script", "split; content");

    doThrow(new SQLException("dummy exception")).when(queryExecuter).execute("split");

    try {
      applier.applyChangeScript(script);
      fail("exception expected");
    } catch (ChangeScriptFailedException e) {
      assertThat(e.getExecutedSql(), is("split"));
      assertThat(e.getScript(), is(script));
    }

    verify(queryExecuter, never()).execute("content");
  }

  @Test
  public void shouldInsertToSchemaVersionTable() throws Exception {
    ChangeScript changeScript = new ChangeScript(1, "script.sql");

    applier.insertToSchemaVersionTable(changeScript);

        verify(schemaVersionManager).recordScriptApplied(changeScript);

  }

  @Test
  public void shouldCommitTransactionOnErrrCommitTransaction() throws Exception {
    applier.commitTransaction();

    verify(queryExecuter).commit();
  }


}
TOP

Related Classes of com.dbdeploy.appliers.DirectToDbApplierTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.