package com.freetmp.maven.mbg.extend.plugin;
import com.freetmp.mbg.constant.DatabaseType;
import com.freetmp.xmbg.test.entity.User;
import com.freetmp.xmbg.test.mapper.UserMapper;
import com.github.springtestdbunit.DbUnitTestExecutionListener;
import com.github.springtestdbunit.annotation.DatabaseOperation;
import com.github.springtestdbunit.annotation.DatabaseSetup;
import com.github.springtestdbunit.annotation.DatabaseTearDown;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import java.util.Date;
import java.util.List;
import static org.apache.commons.lang3.StringUtils.equalsIgnoreCase;
import static org.apache.commons.lang3.StringUtils.upperCase;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Created by LiuPin on 2015/5/18.
*/
@ContextConfiguration(locations = {"classpath:xmbg-spring-config.xml"})
@TestExecutionListeners({DbUnitTestExecutionListener.class })
@DatabaseSetup({"classpath:datasets/User.xml"})
@DatabaseTearDown(type = DatabaseOperation.CLEAN_INSERT, value = {"classpath:datasets/User.xml"})
public abstract class XmbgBaseTest extends AbstractTransactionalJUnit4SpringContextTests {
@Autowired UserMapper mapper;
@Value("${case.sensitive}") boolean caseSensitive;
@Value("${escape.pattern}") String escapePattern;
@Value("${jdbc.url}") String jdbcUrl;
protected void validate(List<User> list, List<User> loadeds) {
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
User loaded = loadeds.get(i);
assertThat(loaded).isNotNull();
assertThat(loaded.getRoles()).isNotNull();
assertThat(loaded).isEqualToIgnoringGivenFields(user, "id", "registerDate");
}
}
public User buildUser(Long id) {
User user = new User();
user.setId(id);
user.setLoginName("tester_" + id);
user.setName("Tester_" + id);
user.setPassword("691b14d79bf0fa2215f155235df5e670b64394cc");
user.setSalt("7efbd59d9741d34f");
user.setRoles("user");
user.setRegisterDate(new Date());
return user;
}
public String escapeOrNot(String column){
return caseSensitive ? escapePattern.replace("?", column) : column;
}
public DatabaseType dbType(){
String[] arrays = jdbcUrl.split(":");
String dbType;
if(equalsIgnoreCase(arrays[1], "log4jdbc")){
dbType = upperCase(arrays[2]);
}else {
dbType = upperCase(arrays[1]);
}
return DatabaseType.valueOf(dbType);
}
public boolean isUnsupported(DatabaseType... types){
DatabaseType type = dbType();
for (DatabaseType dt : types){
if(type.equals(dt)) return true;
}
return false;
}
}