/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.model; import net.codjo.persistent.PersistenceException; import net.codjo.persistent.Reference; import net.codjo.utils.TestEnvironnement; import fakedb.FakeDriver; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * Test de TableHome et Table. * * @author $Author: blazart $ * @version $Revision: 1.2 $ */ public class TableHomeTest extends TestCase { private static final String createTableTestQuery = "create table TABLE_TEMP_FOR_TU ( NAME varchar(15) not null )"; private static final String dropTableTestQuery = "drop table TABLE_TEMP_FOR_TU"; private static final String insertTableTestQuery = "insert into PM_TABLE values(255, 'TABLE_TEMP_FOR_TU', 'une table', null, null, 2, 'PENELOPE')"; private static final String deleteTableTestQuery = "delete from PM_TABLE where DB_TABLE_NAME='TABLE_TEMP_FOR_TU'"; TestEnvironnement testEnv; TableHome tablehome; /** * Constructor for the TableHomeTest object * * @param name Description of Parameter */ public TableHomeTest(String name) { super(name); } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_containsColumn() throws Exception { Table table = getPmTable(); assertTrue("Colonne existe", table.containsColumn("STEP")); assertTrue("Colonne n'existe pas", !table.containsColumn("BOBO")); } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getPkNames() throws Exception { Table table = getPmTable(); assertEquals("Une pk", table.getPkNames().size(), 1); assertTrue("Colonne pk", table.getPkNames().contains("DB_TABLE_NAME_ID")); } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getPkNames_NoPK() throws Exception { Connection con = testEnv.getHomeConnection(); Statement stmt = con.createStatement(); try { FakeDriver.getDriver().pushUpdateConstraint(insertTableTestQuery); FakeDriver.getDriver().pushUpdateConstraint(createTableTestQuery); stmt.executeUpdate(createTableTestQuery); stmt.executeUpdate(insertTableTestQuery); Table table = (Table)getTableTempForTU().getObject(); assertEquals("Une pk", table.getPkNames().size(), 0); } finally { FakeDriver.getDriver().pushUpdateConstraint(dropTableTestQuery); FakeDriver.getDriver().pushUpdateConstraint(deleteTableTestQuery); stmt.executeUpdate(deleteTableTestQuery); stmt.executeUpdate(dropTableTestQuery); } } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getReference() throws Exception { Connection con = testEnv.getHomeConnection(); Statement stmt = con.createStatement(); try { FakeDriver.getDriver().pushUpdateConstraint(insertTableTestQuery); FakeDriver.getDriver().pushUpdateConstraint(createTableTestQuery); stmt.executeUpdate(createTableTestQuery); stmt.executeUpdate(insertTableTestQuery); Reference ref = getTableTempForTU(); assertNotNull(ref); Table table = (Table)ref.getObject(); assertEquals(table.getDBTableName(), "TABLE_TEMP_FOR_TU"); assertEquals(table.getRecordingMode(), TableRecordingMode.BY_PERIOD_AND_PORTFOLIOGROUP); } finally { FakeDriver.getDriver().pushUpdateConstraint(dropTableTestQuery); FakeDriver.getDriver().pushUpdateConstraint(deleteTableTestQuery); stmt.executeUpdate(deleteTableTestQuery); stmt.executeUpdate(dropTableTestQuery); } } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getTable_DuringTransaction() throws Exception { tablehome.getConnection().setAutoCommit(false); Table table = getPmTable(); assertEquals(table.getDBTableName(), "PM_TABLE"); tablehome.getConnection().rollback(); } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getTable_notInPMTable() throws Exception { // Table table = getPmTable(); // assertNotNull(table); // assertEquals(table.getDBTableName(), "PM_TABLE"); // assertNull("La table PM_TABLE n'est pas dans la table PM_TABLE", table.getTableName()); } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getTable_inPMTable() throws Exception { Connection con = testEnv.getHomeConnection(); Statement stmt = con.createStatement(); try { FakeDriver.getDriver().pushUpdateConstraint(insertTableTestQuery); FakeDriver.getDriver().pushUpdateConstraint(createTableTestQuery); stmt.executeUpdate(createTableTestQuery); stmt.executeUpdate(insertTableTestQuery); Table table = (Table)getTableTempForTU().getObject(); assertEquals(table.getDBTableName(), "TABLE_TEMP_FOR_TU"); assertEquals(table.getTableName(), "une table"); assertEquals(table.getTableStep(), null); assertEquals(table.getSource(), null); assertEquals(table.getRecordingMode(), TableRecordingMode.BY_PERIOD_AND_PORTFOLIOGROUP); } finally { FakeDriver.getDriver().pushUpdateConstraint(dropTableTestQuery); FakeDriver.getDriver().pushUpdateConstraint(deleteTableTestQuery); stmt.executeUpdate(deleteTableTestQuery); stmt.executeUpdate(dropTableTestQuery); } } /** * A unit test for JUnit * * @throws PersistenceException Description of Exception */ public void test_getTable_UnknownTable() throws PersistenceException { FakeDriver.getDriver().pushResultSet(FakeDriver.EMPTY, "FakeDatabaseMetaData.getColumns(null, null, BAD_TABLE_NAME, null)"); FakeDriver.getDriver().pushResultSet(FakeDriver.EMPTY, "select * from PM_TABLE where DB_TABLE_NAME='BAD_TABLE_NAME'"); Table ma_table = tablehome.getTable("BAD_TABLE_NAME"); assertNull("Table inconnue mais trouvee", ma_table); } /** * A unit test for JUnit * * @throws Exception Description of Exception */ public void test_getTable() throws Exception { Table ma_table = getPmTable(); assertEquals(ma_table.getDBTableName(), "PM_TABLE"); assertEquals(ma_table.getNumberOfCol(), 7); } /** * The JUnit setup method * * @throws Exception Description of Exception */ protected void setUp() throws Exception { TestEnvironnement.forceFakeDriver(); testEnv = TestEnvironnement.newEnvironment(); tablehome = testEnv.getTableHome(); } /** * The teardown method for JUnit */ protected void tearDown() { testEnv.close(); } /** * Overview. * * @throws SQLException Description of Exception */ void initPmTableColumns() throws SQLException { Object[][] tableDef = { {}, {null, null, null, "DB_TABLE_NAME_ID", new Integer(Types.INTEGER)}, {null, null, null, "DB_TABLE_NAME", new Integer(Types.VARCHAR)}, {null, null, null, "TABLE_NAME", new Integer(Types.VARCHAR)}, {null, null, null, "STEP", new Integer(Types.VARCHAR)}, {null, null, null, "SOURCE_SYSTEM", new Integer(Types.VARCHAR)}, {null, null, null, "RECORDING_MODE", new Integer(Types.INTEGER)}, {null, null, null, "APPLICATION", new Integer(Types.VARCHAR)} }; FakeDriver.getDriver().pushResultSet(tableDef, "FakeDatabaseMetaData.getColumns(null, null, PM_TABLE, null)"); } /** * Gets the TableTempForTU attribute of the TableHomeTest object * * @return The TableTempForTU value * * @throws Exception Description of Exception */ private Reference getTableTempForTU() throws Exception { // Requete MetaData pour connaitre la table FakeDriver.getDriver().pushResultSet(FakeDriver.EMPTY, "FakeDatabaseMetaData.getPrimaryKeys(null, null, TABLE_TEMP_FOR_TU)"); FakeDriver.getDriver().pushResultSet(FakeDriver.EMPTY, "FakeDatabaseMetaData.getColumns(null, null, TABLE_TEMP_FOR_TU, null)"); // Requete du select dans la table Object[][] matrix = { { "DB_TABLE_NAME_ID", "DB_TABLE_NAME", "TABLE_NAME", "STEP", "SOURCE_SYSTEM", "RECORDING_MODE", "APPLICATION" }, { new Integer(255), "TABLE_TEMP_FOR_TU", "une table", null, null, new Integer(2), "TEST_TU" } }; FakeDriver.getDriver().pushResultSet(matrix, "select * from PM_TABLE where DB_TABLE_NAME_ID=255"); return tablehome.getReference(255); } /** * Gets the PmTable attribute of the TableHomeTest object * * @return The PmTable value * * @throws Exception Description of Exception */ private Table getPmTable() throws Exception { // Requete MetaData pour connaitre la table Object[][] tablePk = { {"COLUMN_NAME"}, {"DB_TABLE_NAME_ID"} }; FakeDriver.getDriver().pushResultSet(tablePk, "FakeDatabaseMetaData.getPrimaryKeys(null, null, PM_TABLE)"); initPmTableColumns(); // Requete du select dans la table FakeDriver.getDriver().pushResultSet(FakeDriver.EMPTY, "select * from PM_TABLE where DB_TABLE_NAME='PM_TABLE'"); return tablehome.getTable("PM_TABLE"); } /** * A unit test suite for JUnit * * @return The test suite */ public static Test suite() { return new TestSuite(TableHomeTest.class); } }