package org.qi4j.entitystore.qrm; import com.ibatis.common.jdbc.ScriptRunner; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; import java.util.Map; import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.qi4j.entitystore.qrm.entity.PersonComposite; import org.qi4j.spi.entity.QualifiedIdentity; import static java.util.Arrays.*; import static org.junit.Assert.*; public class IBatisClientTest { private DerbyDatabaseHandler databaseHandler; private QrmSqlClient client; private static final String TEST_ID = TestConfig.JANE_SMITH_ID; @Test @Ignore( "The entire QRM is buggered." ) public void loadExistingPerson() throws Exception { final QualifiedIdentity id = new QualifiedIdentity( TEST_ID, PersonComposite.class ); assertEquals( "id", TEST_ID, id.identity() ); final Map<String, Object> rawData = client.executeLoad( id ); System.out.println( "rawData = " + rawData ); assertEquals( "id gefunden", TEST_ID, rawData.get( "id" ) ); assertEquals( "last name", "Smith", rawData.get( "lastName" ) ); final Object accountsValue = rawData.get( "accounts" ); assertTrue( "accounts", accountsValue instanceof Collection ); final Collection accounts = (Collection) accountsValue; assertEquals( "one account ", 2, accounts.size() ); assertEquals( "accounts", asList( "1", "2" ), accounts ); } @Before public void setUp() throws Exception { databaseHandler = new DerbyDatabaseHandler(); setupDatabase( databaseHandler.getJDBCConnection() ); client = new QrmSqlClient( databaseHandler.getUrlString( TestConfig.SQL_MAP_CONFIG_XML ), null ); client.activate(); } private void setupDatabase( Connection jdbcConnection ) throws SQLException, IOException { final ScriptRunner runner = new ScriptRunner( jdbcConnection, true, true ); runScript( runner, TestConfig.SCHEMA_FILE ); runScript( runner, TestConfig.DATA_FILE ); } private void runScript( ScriptRunner runner, String file ) throws IOException, SQLException { runner.runScript( new InputStreamReader( new URL( databaseHandler.getUrlString( file ) ).openStream() ) ); } @After public void shutdown() { if( databaseHandler != null ) { databaseHandler.shutdown(); } } }