package liquibase.ext.ora.grant.revokegrant;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
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.testing.BaseTestCase;
import liquibase.parser.ChangeLogParserFactory;
import liquibase.resource.FileSystemResourceAccessor;
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 RevokeObjectPermissionChangeTest extends BaseTestCase {
@Before
public void setUp() throws Exception {
changeLogFile = "liquibase/ext/ora/grant/revokegrant/changelog.test.xml";
connectToDB();
cleanDB();
}
@Test
public void test() throws Exception {
if (connection == null) {
return;
}
liquiBase.update("null");
}
@Test
public void generateStatement() {
RevokeObjectPermissionChange change = new RevokeObjectPermissionChange();
change.setSchemaName("SCHEMA_NAME");
change.setObjectName("TABLE_NAME");
change.setRecipientList("RECIPIENT_USER");
change.setSelect(true);
change.setUpdate(true);
change.setInsert(true);
change.setDelete(true);
change.setExecute(true);
SqlStatement[] statements = change.generateStatements(new OracleDatabase());
assertEquals(1, statements.length);
RevokeObjectPermissionStatement statement = (RevokeObjectPermissionStatement) statements[0];
assertEquals("SCHEMA_NAME", statement.getSchemaName());
assertEquals("TABLE_NAME", statement.getObjectName());
assertEquals("RECIPIENT_USER", statement.getRecipientList());
assertEquals(true, statement.getSelect());
assertEquals(true, statement.getUpdate());
assertEquals(true, statement.getInsert());
assertEquals(true, statement.getDelete());
assertEquals(true, statement.getExecute());
}
@Test
public void getConfirmationMessage() {
RevokeObjectPermissionChange change = new RevokeObjectPermissionChange();
change.setObjectName("TABLE_NAME");
change.setRecipientList("RECIPIENT_USER");
assertEquals("Revoking grants on " + change.getObjectName() + " that had been given to " + change.getRecipientList(),
change.getConfirmationMessage());
}
@Test
public void getChangeMetaData() {
RevokeObjectPermissionChange change = new RevokeObjectPermissionChange();
assertEquals("revokeObjectPermission", ChangeFactory.getInstance().getChangeMetaData(change).getName());
assertEquals("Revoke Schema Object Permission", ChangeFactory.getInstance().getChangeMetaData(change).getDescription());
assertEquals(ChangeMetaData.PRIORITY_DEFAULT, ChangeFactory.getInstance().getChangeMetaData(change).getPriority());
}
@Test
public void parseAndGenerate() throws Exception {
if (connection == null) {
return;
}
Database database = liquiBase.getDatabase();
ResourceAccessor resourceAccessor = new FileSystemResourceAccessor("src/test/java");
ChangeLogParameters changeLogParameters = new ChangeLogParameters();
DatabaseChangeLog changeLog = ChangeLogParserFactory.getInstance()
.getParser(changeLogFile, resourceAccessor)
.parse(changeLogFile,changeLogParameters, resourceAccessor);
changeLog.validate(database);
List<ChangeSet> changeSets = changeLog.getChangeSets();
assertEquals( "number of changesets in the " + changeLogFile + " is incorrect", 3, changeSets.size() );
ChangeSet changeSet = changeSets.get(2);
assertEquals("Wrong number of changes found in changeset", 1, changeSet.getChanges().size());
Change change = changeSet.getChanges().get(0);
List<String> expectedQueries = new ArrayList<String>();
expectedQueries.add("REVOKE UPDATE,INSERT,DELETE ON LIQUIBASE.addgrant FROM SYSTEM");
Sql[] sql = SqlGeneratorFactory.getInstance().generateSql(change.generateStatements(database)[0], database);
assertEquals( "wrong number of statements generated", expectedQueries.size(), sql.length );
assertEquals(expectedQueries.get(0), sql[0].toSql());
}
}