package uk.co.optimisticpanda.dropwizard;
import static com.google.common.collect.Lists.newArrayList;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.sql.SQLException;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InOrder;
import uk.co.optimisticpanda.dropwizard.dbdeploy.ScriptApplier;
import com.dbdeploy.database.QueryStatementSplitter;
import com.dbdeploy.database.changelog.QueryExecuter;
import com.dbdeploy.scripts.ChangeScript;
import com.google.common.collect.Lists;
public class ScriptApplierTest {
private QueryExecuter queryExecuter;
private QueryStatementSplitter splitter;
private ScriptApplier scriptApplier;
private ChangeScript changeScript;
@Before
public void setUpScriptApplier(){
queryExecuter = mock(QueryExecuter.class);
splitter = mock(QueryStatementSplitter.class);
changeScript = mock(ChangeScript.class);
scriptApplier = new ScriptApplier(queryExecuter, splitter);
}
@Test
public void checkApply() throws SQLException{
when(splitter.split("")).thenReturn(newArrayList("statement1", "statement2"));
scriptApplier.apply("");
InOrder order = inOrder(queryExecuter, splitter);
order.verify(queryExecuter).setAutoCommit(false);
order.verify(queryExecuter).execute("statement1");
order.verify(queryExecuter).execute("statement2");
order.verify(queryExecuter).commit();
}
@Test
public void checkListApply() throws SQLException{
String content = "statement1, statement2";
when(splitter.split(content)).thenReturn(newArrayList("statement1", "statement2"));
when(changeScript.getContent()).thenReturn(content);
scriptApplier.apply(Lists.newArrayList(changeScript));
InOrder order = inOrder(queryExecuter, splitter, changeScript);
order.verify(queryExecuter).setAutoCommit(false);
order.verify(changeScript).getContent();
order.verify(queryExecuter).execute("statement1");
order.verify(queryExecuter).execute("statement2");
order.verify(queryExecuter).commit();
}
}