package com.alibaba.cobar.client;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.testng.annotations.Test;
import com.alibaba.cobar.client.entities.Offer;
import com.alibaba.cobar.client.support.utils.CollectionUtils;
import com.alibaba.cobar.client.support.vo.BatchInsertTask;
public class CobarSqlMapClientTemplateWithCustomMergerTest extends AbstractTestNGCobarClientTest {
public CobarSqlMapClientTemplateWithCustomMergerTest() {
super(new String[] { "META-INF/spring/datasources-appctx.xml",
"META-INF/spring/cobar-client-appctx.xml",
"META-INF/spring/cobar-client-custom-merger-appctx.xml" });
}
@Test
public void testQueryForListWithCustomMerger() {
batchInsertOffersAsFixture();
SqlMapClientTemplate st = (SqlMapClientTemplate) getApplicationContext().getBean(
"sqlMapClientTemplateWithMerger");
@SuppressWarnings("unchecked")
List lst = st
.queryForList("com.alibaba.cobar.client.entities.Offer.findAllWithOrderByOnSubject");
assertTrue(CollectionUtils.isNotEmpty(lst));
assertEquals(5, lst.size());
verifyOffersOrderBySubject(lst);
}
@SuppressWarnings("unchecked")
private void verifyOffersOrderBySubject(List lst) {
for (int i = 0; i < lst.size(); i++) {
Offer offer = (Offer) lst.get(i);
if (i == 0 || i == 1) {
assertEquals(2, offer.getMemberId().longValue());
} else {
assertEquals(1, offer.getMemberId().longValue());
}
switch (i) {
case 0:
assertEquals("A", offer.getSubject());
break;
case 1:
assertEquals("D", offer.getSubject());
break;
case 2:
assertEquals("S", offer.getSubject());
break;
case 3:
assertEquals("X", offer.getSubject());
break;
case 4:
assertEquals("Z", offer.getSubject());
break;
default:
throw new IllegalArgumentException("unexpected condition.");
}
}
}
@Test
@SuppressWarnings("unchecked")
public void testQueryForListWithoutCustomMerger() {
batchInsertOffersAsFixture();
List lst = getSqlMapClientTemplate().queryForList(
"com.alibaba.cobar.client.entities.Offer.findAllWithOrderByOnSubject");
assertTrue(CollectionUtils.isNotEmpty(lst));
// contains all of the entities, but the order is not guaranteed.
assertEquals(5, lst.size());
// sort in application code
Comparator<Offer> comparator = (Comparator<Offer>) getApplicationContext().getBean(
"comparator");
Collections.sort(lst, comparator);
verifyOffersOrderBySubject(lst);
}
private void batchInsertOffersAsFixture() {
BatchInsertTask task = new BatchInsertTask();
List<Offer> offers = new ArrayList<Offer>();
Offer offer = new Offer();
offer.setMemberId(1L);
offer.setSubject("Z");
offer.setGmtUpdated(new Date());
offers.add(offer);
offer = new Offer();
offer.setMemberId(1L);
offer.setSubject("X");
offer.setGmtUpdated(new Date());
offers.add(offer);
offer = new Offer();
offer.setMemberId(1L);
offer.setSubject("S");
offer.setGmtUpdated(new Date());
offers.add(offer);
offer = new Offer();
offer.setMemberId(2L);
offer.setSubject("D");
offer.setGmtUpdated(new Date());
offers.add(offer);
offer = new Offer();
offer.setMemberId(2L);
offer.setSubject("A");
offer.setGmtUpdated(new Date());
offers.add(offer);
task.setEntities(offers);
getSqlMapClientTemplate().insert("com.alibaba.cobar.client.entities.Offer.batchInsert",
task);
}
}