package com.brightgenerous.datasource; import static org.junit.Assert.*; import java.util.List; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.brightgenerous.datasource.mybatis.guice.bean.Header; import com.brightgenerous.datasource.mybatis.guice.bean.MultiKeyDetail; import com.brightgenerous.datasource.mybatis.guice.bean.SimpleKeyDetail; import com.brightgenerous.datasource.mybatis.guice.mapper.Key; import com.brightgenerous.datasource.mybatis.guice.transaction.BrigenTransaction; import com.brightgenerous.orm.Condition; public class MybatisGuiceDataSourceTest { @BeforeClass public static void before() throws Exception { DataSource.set(MybatisGuiceDataSource.class); DataSource.get().initialize(); } @AfterClass public static void after() throws Exception { DataSource.get().destroy(); } @Test public void test() throws Exception { BrigenTransaction bgt = DataSource.get().instance(BrigenTransaction.class); assertTrue(bgt.existsMapper()); final int HEADERS = 15; final int MULTI_DETAILS = 5; final int SIMPLE_DETAILS = 20; for (int i = 0; i < HEADERS; i++) { Header header = new Header(); // test Fill annotation assertNotNull(header.getMultiKeyDetails()); assertNotNull(header.getSimpleKeyDetails()); header.setHeaderValue(String.format("header-%02d", i)); for (int j = 0; j < MULTI_DETAILS; j++) { MultiKeyDetail mkd = new MultiKeyDetail(); mkd.setHeader(header); mkd.setDetailValue(String.format("multi-detail-%02d", j)); header.getMultiKeyDetails().add(mkd); } for (int j = 0; j < SIMPLE_DETAILS; j++) { SimpleKeyDetail skd = new SimpleKeyDetail(); skd.setHeader(header); skd.setDetailValue(String.format("simple-detail-%02d", j)); header.getSimpleKeyDetails().add(skd); } bgt.add(header); Header stored = bgt.getHeaderDetails(header); assertFalse(header == stored); assertEquals(header.getHeaderNo(), stored.getHeaderNo()); assertEquals(header.getHeaderValue(), stored.getHeaderValue()); } // test header_no, detail_no for (int i = 0; i < HEADERS; i++) { Header header = new Header(); header.setHeaderNo(Long.valueOf(i + 1)); Header stored = bgt.getHeaderDetails(header); assertNotNull(stored); assertEquals(MULTI_DETAILS, stored.getMultiKeyDetails().size()); assertEquals(SIMPLE_DETAILS, stored.getSimpleKeyDetails().size()); for (int j = 0; j < MULTI_DETAILS; j++) { assertEquals(Long.valueOf(j + 1), stored.getMultiKeyDetails().get(j).getDetailNo()); } for (int j = 0; j < SIMPLE_DETAILS; j++) { assertEquals(Long.valueOf((i * SIMPLE_DETAILS) + j + 1), stored .getSimpleKeyDetails().get(j).getDetailNo()); } } // test condition { Condition condition = new Condition(); condition.getFields().get(Key.HEADER_VALUE).setSuffixValue("03"); // where header_value like '%' || '03' List<Header> headers = bgt.getHeaders(condition); assertEquals(1, headers.size()); assertEquals("header-03", headers.get(0).getHeaderValue()); } { Condition condition = new Condition(); condition.getFields().get(Key.HEADER_VALUE).setPrefixValue("header-0"); // where header_value like 'header-0' || '%' condition.getSorts().prependAsc(Key.HEADER_NO); List<Header> headers = bgt.getHeaders(condition); assertEquals(10, headers.size()); assertEquals("header-00", headers.get(0).getHeaderValue()); } { Condition condition = new Condition(); condition.getFields().get(Key.DETAIL_VALUE).setBroadValue("03"); // where detail_value like '%' || '03' || '%' condition.getSorts().prependAsc(Key.HEADER_NO, Key.DETAIL_NO); // order by header_no, detail_no List<MultiKeyDetail> mds = bgt.getMultiKeyDetails(condition); assertEquals(HEADERS, mds.size()); for (int i = 0; i < HEADERS; i++) { assertEquals(String.format("header-%02d", i), mds.get(i).getHeader() .getHeaderValue()); } List<SimpleKeyDetail> sds = bgt.getSimpleKeyDetails(condition); assertEquals(HEADERS, sds.size()); for (int i = 0; i < HEADERS; i++) { assertEquals(String.format("header-%02d", i), sds.get(i).getHeader() .getHeaderValue()); } } // test transaction rollback { Header header = new Header(); header.setHeaderNo(Long.valueOf(3)); Header stored = bgt.getHeaderDetails(header); assertEquals(MULTI_DETAILS, stored.getMultiKeyDetails().size()); assertEquals(SIMPLE_DETAILS, stored.getSimpleKeyDetails().size()); stored.getMultiKeyDetails().remove(0); stored.getSimpleKeyDetails().remove(0); stored.getSimpleKeyDetails().remove(0); RuntimeException rex = new RuntimeException(Header.class.getName()); try { bgt.editHeaderDetails(stored, rex); fail(); } catch (RuntimeException e) { // rollback done assertEquals(Header.class.getName(), e.getMessage()); } } { Header header = new Header(); header.setHeaderNo(Long.valueOf(3)); Header stored = bgt.getHeaderDetails(header); assertNotEquals("hoge", stored.getHeaderValue()); assertEquals(MULTI_DETAILS, stored.getMultiKeyDetails().size()); assertEquals(SIMPLE_DETAILS, stored.getSimpleKeyDetails().size()); stored.setHeaderValue("hoge"); stored.getMultiKeyDetails().remove(0); stored.getSimpleKeyDetails().remove(0); stored.getSimpleKeyDetails().remove(0); bgt.editHeaderDetails(stored); stored = bgt.getHeaderDetails(header); assertEquals("hoge", stored.getHeaderValue()); assertEquals(MULTI_DETAILS - 1, stored.getMultiKeyDetails().size()); assertEquals(SIMPLE_DETAILS - 2, stored.getSimpleKeyDetails().size()); } } }