package liquibase.ext.ora.synonym.createSynonym;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import liquibase.Contexts;
import liquibase.LabelExpression;
import liquibase.change.Change;
import liquibase.change.ChangeFactory;
import liquibase.change.ChangeMetaData;
import liquibase.changelog.ChangeLogParameters;
import liquibase.changelog.ChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.database.Database;
import liquibase.database.core.OracleDatabase;
import liquibase.ext.ora.createSynonym.CreateSynonymChange;
import liquibase.ext.ora.createSynonym.CreateSynonymStatement;
import liquibase.ext.ora.testing.BaseTestCase;
import liquibase.parser.ChangeLogParserFactory;
import liquibase.resource.ClassLoaderResourceAccessor;
import liquibase.resource.ResourceAccessor;
import liquibase.sql.Sql;
import liquibase.sqlgenerator.SqlGeneratorFactory;
import liquibase.statement.SqlStatement;
import org.junit.Before;
import org.junit.Test;
public class CreateSynonymTest extends BaseTestCase {
private static final String OBJECT_SCHEMA = "object_schema";
private static final String OBJECT_NAME = "object";
private static final String SYNONYM_NAME = "synonym_name";
private static final String SYNONYM_SCHEMA = "synonym_schema";
@Before
public void setUp() throws Exception {
changeLogFile = "liquibase/ext/ora/synonym/createSynonym/changelog.text.xml";
connectToDB();
cleanDB();
}
@Test
public void getChangeMetaData() {
CreateSynonymChange createSynonymChange = new CreateSynonymChange();
assertEquals("createSynonym", ChangeFactory.getInstance().getChangeMetaData(createSynonymChange).getName());
assertEquals("Create synonym", ChangeFactory.getInstance().getChangeMetaData(createSynonymChange).getDescription());
assertEquals(ChangeMetaData.PRIORITY_DEFAULT, ChangeFactory.getInstance().getChangeMetaData(createSynonymChange).getPriority());
}
@Test
public void getConfirmationMessage() {
CreateSynonymChange change = new CreateSynonymChange();
change.setSynonymName("new_synonym");
assertEquals("Synonym new_synonym created", change.getConfirmationMessage());
}
@Test
public void generateStatement() {
CreateSynonymChange change = new CreateSynonymChange();
change.setReplace(true);
change.setPublic(true);
change.setSynonymSchemaName(SYNONYM_SCHEMA);
change.setSynonymName(SYNONYM_NAME);
change.setObjectSchemaName(OBJECT_SCHEMA);
change.setObjectName(OBJECT_NAME);
Database database = new OracleDatabase();
SqlStatement[] sqlStatements = change.generateStatements(database);
assertEquals(1, sqlStatements.length);
assertTrue(sqlStatements[0] instanceof CreateSynonymStatement);
CreateSynonymStatement statement = (CreateSynonymStatement) sqlStatements[0];
assertTrue(statement.isReplace());
assertTrue(statement.isPublic());
assertEquals(OBJECT_NAME, statement.getObjectName());
assertEquals(OBJECT_SCHEMA, statement.getObjectSchemaName());
assertEquals(SYNONYM_NAME, statement.getSynonymName());
assertEquals(SYNONYM_SCHEMA, statement.getSynonymSchemaName());
}
@Test
public void parseAndGenerate() throws Exception {
if (connection == null) {
return;
}
Database database = liquiBase.getDatabase();
ResourceAccessor resourceAccessor = new ClassLoaderResourceAccessor();
ChangeLogParameters changeLogParameters = new ChangeLogParameters();
DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance().getParser(changeLogFile, resourceAccessor).parse(changeLogFile,
changeLogParameters, resourceAccessor);
liquiBase.checkLiquibaseTables(false, changeLog, new Contexts(), new LabelExpression());
changeLog.validate(database);
List<ChangeSet> changeSets = changeLog.getChangeSets();
Change change = changeSets.get(0).getChanges().get(0);
Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
String expected = "CREATE SYNONYM new_synonym FOR object";
assertEquals(expected, sql[0].toSql());
}
@Test
public void test() throws Exception {
if (connection == null) {
return;
}
liquiBase.update(new Contexts());
liquiBase.rollback(1, new Contexts(), new LabelExpression());
}
}