package com.nurkiewicz.jdbcrepository;
import com.nurkiewicz.jdbcrepository.repositories.User;
import com.nurkiewicz.jdbcrepository.repositories.UserRepository;
import com.nurkiewicz.jdbcrepository.sql.SqlGenerator;
import org.h2.jdbcx.JdbcDataSource;
import org.junit.Test;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionOperations;
import org.springframework.transaction.support.TransactionTemplate;
import java.util.Date;
import java.util.List;
import static org.fest.assertions.api.Assertions.assertThat;
public class StandaloneUsageTest {
public static final String JDBC_URL = "jdbc:h2:mem:DB_CLOSE_DELAY=-1;INIT=RUNSCRIPT FROM 'classpath:schema_h2.sql'";
@Test
public void shouldStartRepositoryWithoutSpring() throws Exception {
//given
final JdbcDataSource dataSource = new JdbcDataSource();
dataSource.setURL(JDBC_URL);
final UserRepository userRepository = new UserRepository("users");
userRepository.setDataSource(dataSource);
userRepository.setSqlGenerator(new SqlGenerator()); //optional
//when
final List<User> list = userRepository.findAll();
//then
assertThat(list).isEmpty();
}
@Test
public void shouldInsertIntoDatabase() throws Exception {
//given
final JdbcDataSource dataSource = new JdbcDataSource();
dataSource.setURL(JDBC_URL);
final UserRepository userRepository = new UserRepository("users");
userRepository.setDataSource(dataSource);
userRepository.setSqlGenerator(new SqlGenerator());
//and
final TransactionOperations tx = new TransactionTemplate(
new DataSourceTransactionManager(dataSource));
//when
final List<User> users = tx.execute(new TransactionCallback<List<User>>() {
@Override
public List<User> doInTransaction(TransactionStatus status) {
final User user = new User("john", new Date(), 0, false);
userRepository.save(user);
return userRepository.findAll();
}
});
//then
assertThat(users).hasSize(1);
}
}