package net.wotonomy.jdbcadaptor; import java.sql.SQLException; import junit.framework.TestCase; import net.wotonomy.access.EODatabase; import net.wotonomy.access.EODatabaseContext; import net.wotonomy.control.EOClassDescription; import net.wotonomy.control.EOEditingContext; import net.wotonomy.control.EOKeyGlobalID; import net.wotonomy.control.EOTemporaryGlobalID; import net.wotonomy.control.EOVectorKeyGlobalID; import net.wotonomy.foundation.NSDictionary; public class JDBCDBTest extends TestCase { public void testJDBCContextH2() throws SQLException, ClassNotFoundException { String jdbcURL = "jdbc:h2:mem:test"; // Feels a bit weird not to put anything here, but I don't think we need to NSDictionary jdbcInfo = new NSDictionary<>(); NSDictionary connDict = new NSDictionary<>(); connDict.put("driver", "org.h2.Driver"); connDict.put("jdbc2Info", jdbcInfo); connDict.put("URL", jdbcURL); JDBCAdaptor adaptor = new JDBCAdaptor("JDBC"); adaptor.setConnectionDictionary(connDict); adaptor.assertConnectionDictionaryIsValid(); EODatabase db = new EODatabase(adaptor); EODatabaseContext dbCtx = new EODatabaseContext(db); ((JDBCContext)dbCtx.adaptorContext()).connect(); EOEditingContext editCtx = new EOEditingContext(dbCtx); EOClassDescription personDesc = EOClassDescription.classDescriptionForClass(Person.class); EOTemporaryGlobalID tempGID = new EOTemporaryGlobalID(); Person person = personDesc.createInstanceWithEditingContext(editCtx, tempGID); person.setFirstName("John"); person.setLastName("Doe"); person.setAge(25); editCtx.saveChanges(); Person newPerson = (Person) editCtx.objectForGlobalID(tempGID); assertEquals(person, newPerson); } public void testJDBCContextPostgres() throws SQLException, ClassNotFoundException { String jdbcURL = "jdbc:postgresql:wotonomy"; // Feels a bit weird not to put anything here, but I don't think we need to NSDictionary jdbcInfo = new NSDictionary<>(); NSDictionary connDict = new NSDictionary<>(); connDict.put("driver", "org.postgresql.Driver"); connDict.put("jdbc2Info", jdbcInfo); connDict.put("URL", jdbcURL); connDict.put("username", "wotonomy"); connDict.put("password", "wotonomy"); JDBCAdaptor adaptor = new JDBCAdaptor("JDBC"); adaptor.setConnectionDictionary(connDict); adaptor.assertConnectionDictionaryIsValid(); EODatabase db = new EODatabase(adaptor); EODatabaseContext dbCtx = new EODatabaseContext(db); ((JDBCContext)dbCtx.adaptorContext()).connect(); ((JDBCContext)dbCtx.adaptorContext()).beginTransaction(); EOEditingContext editCtx = new EOEditingContext(dbCtx); EOClassDescription personDesc = EOClassDescription.classDescriptionForClass(Person.class); EOKeyGlobalID personID = new EOVectorKeyGlobalID("John Doe", "John", "Doe"); //Person person = personDesc.createInstanceWithEditingContext(editCtx, personID); Person person = new Person(); person.setFirstName("John"); person.setLastName("Doe"); person.setAge(25); editCtx.insertObjectWithGlobalID(person, personID); editCtx.saveChanges(); //editCtx.invalidateAllObjects(); ((JDBCContext)dbCtx.adaptorContext()).commitTransaction(); //editCtx.reset(); Person newPerson = (Person) editCtx.objectForGlobalID(personID); assertEquals(person, newPerson); } }