package com.nurkiewicz.jdbcrepository;
import com.nurkiewicz.jdbcrepository.repositories.Comment;
import com.nurkiewicz.jdbcrepository.repositories.CommentRepository;
import com.nurkiewicz.jdbcrepository.repositories.User;
import com.nurkiewicz.jdbcrepository.repositories.UserRepository;
import org.junit.Before;
import org.junit.Test;
import javax.annotation.Resource;
import java.util.Date;
import static org.fest.assertions.api.Assertions.assertThat;
/**
* @author Tomasz Nurkiewicz
* @since 12/20/12, 10:55 PM
*/
public abstract class JdbcRepositoryGeneratedKeyTest extends AbstractIntegrationTest {
@Resource
private CommentRepository repository;
@Resource
private UserRepository userRepository;
private String someUser = "some_user";
public JdbcRepositoryGeneratedKeyTest() {
}
public JdbcRepositoryGeneratedKeyTest(int databasePort) {
super(databasePort);
}
@Before
public void setup() {
userRepository.save(new User(someUser, new Date(), -1, false));
}
@Test
public void shouldGenerateKey() throws Exception {
//given
final Comment comment = new Comment(someUser, "Some content", new Date(), 0);
//when
repository.save(comment);
//then
assertThat(comment.getId()).isNotNull();
}
@Test
public void shouldGenerateSubsequentIds() throws Exception {
//given
final Comment firstComment = new Comment(someUser, "Some content", new Date(), 0);
final Comment secondComment = new Comment(someUser, "Some content", new Date(), 0);
//when
repository.save(firstComment);
repository.save(secondComment);
//then
assertThat(firstComment.getId()).isLessThan(secondComment.getId());
}
@Test
public void shouldUpdateCommentByGeneratedId() throws Exception {
//given
final Date oldDate = new Date(100000000);
final Date newDate = new Date(200000000);
final Comment comment = repository.save(new Comment(someUser, "Some content", oldDate, 0));
final int id = comment.getId();
//when
final Comment updatedComment = repository.save(new Comment(id, someUser, "New content", newDate, 1));
//then
assertThat(repository.count()).isEqualTo(1);
assertThat(updatedComment).isEqualTo(new Comment(id, someUser, "New content", newDate, 1));
}
}