Package com.nurkiewicz.jdbcrepository

Source Code of com.nurkiewicz.jdbcrepository.JdbcRepositoryManyToOneTest

package com.nurkiewicz.jdbcrepository;

import com.nurkiewicz.jdbcrepository.repositories.CommentWithUser;
import com.nurkiewicz.jdbcrepository.repositories.CommentWithUserRepository;
import com.nurkiewicz.jdbcrepository.repositories.User;
import com.nurkiewicz.jdbcrepository.repositories.UserRepository;
import org.junit.Before;
import org.junit.Test;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

import javax.annotation.Resource;
import java.sql.Timestamp;
import java.util.GregorianCalendar;
import java.util.List;

import static java.util.Calendar.JANUARY;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.springframework.data.domain.Sort.Direction.ASC;
import static org.springframework.data.domain.Sort.Direction.DESC;

public abstract class JdbcRepositoryManyToOneTest extends AbstractIntegrationTest {

  public static final String SOME_USER = "some_user";
  @Resource
  private CommentWithUserRepository repository;

  @Resource
  private UserRepository userRepository;
  private User someUser;
  private static final java.sql.Date SOME_DATE = new java.sql.Date(new GregorianCalendar(2013, JANUARY, 19).getTimeInMillis());
  private static final Timestamp SOME_TIMESTAMP = new Timestamp(new GregorianCalendar(2013, JANUARY, 20).getTimeInMillis());

  protected JdbcRepositoryManyToOneTest() {
  }

  protected JdbcRepositoryManyToOneTest(int databasePort) {
    super(databasePort);
  }

  @Before
  public void setup() {
    someUser = userRepository.save(new User(SOME_USER, SOME_DATE, -1, false));
  }

  @Test
  public void shouldGenerateKey() throws Exception {
    //given
    final CommentWithUser comment = new CommentWithUser(someUser, "Some content", SOME_TIMESTAMP, 0);

    //when
    repository.save(comment);

    //then
    assertThat(comment.getId()).isNotNull();
  }

  @Test
  public void shouldReturnCommentWithUserAttached() throws Exception {
    //given
    final CommentWithUser comment = new CommentWithUser(someUser, "Some content", SOME_TIMESTAMP, 0);

    //when
    repository.save(comment);

    //then
    final CommentWithUser foundComment = repository.findOne(comment.getId());
    assertThat(foundComment).isEqualTo(new CommentWithUser(comment.getId(), someUser, "Some content", SOME_TIMESTAMP, 0));
  }

  @Test
  public void shouldReturnMultipleCommentsAttachedToTheSameUser() throws Exception {
    //given
    final CommentWithUser first = repository.save(new CommentWithUser(someUser, "First comment", SOME_TIMESTAMP, 3));
    final CommentWithUser second = repository.save(new CommentWithUser(someUser, "Second comment", SOME_TIMESTAMP, 2));
    final CommentWithUser third = repository.save(new CommentWithUser(someUser, "Third comment", SOME_TIMESTAMP, 1));

    //when
    final List<CommentWithUser> all = repository.findAll(new Sort("favourite_count"));

    //then
    assertThat(all).containsExactly(third, second, first);
  }

  @Test
  public void shouldReturnMultipleCommentsAttachedToDifferentUsers() throws Exception {
    //given
    final User firstUser = userRepository.save(new User("First user", SOME_DATE, 10, false));
    final User secondUser = userRepository.save(new User("Second user", SOME_DATE, 20, false));
    final User thirdUser = userRepository.save(new User("Third user", SOME_DATE, 30, false));

    final CommentWithUser first = repository.save(new CommentWithUser(firstUser, "First comment", SOME_TIMESTAMP, 3));
    final CommentWithUser second = repository.save(new CommentWithUser(secondUser, "Second comment", SOME_TIMESTAMP, 2));
    final CommentWithUser third = repository.save(new CommentWithUser(thirdUser, "Third comment", SOME_TIMESTAMP, 1));

    //when
    final List<CommentWithUser> all = repository.findAll(new Sort(DESC, "favourite_count"));

    //then
    assertThat(all).containsExactly(first, second, third);
  }

  @Test
  public void shouldReturnOnlyFirstPageWithUsers() throws Exception {
    //given
    final CommentWithUser first = repository.save(new CommentWithUser(someUser, "First comment", SOME_TIMESTAMP, 3));
    final CommentWithUser second = repository.save(new CommentWithUser(someUser, "Second comment", SOME_TIMESTAMP, 2));
    repository.save(new CommentWithUser(someUser, "Third comment", SOME_TIMESTAMP, 1));

    //when
    final Page<CommentWithUser> page = repository.findAll(new PageRequest(0, 2, ASC, "contents"));

    //then
    assertThat(page.getTotalElements()).isEqualTo(3);
    assertThat(page.getTotalPages()).isEqualTo(2);
    assertThat(page.getContent()).containsExactly(first, second);
  }

  @Test
  public void shouldReturnOnlySecondPageWithUsers() throws Exception {
    //given
    repository.save(new CommentWithUser(someUser, "First comment", SOME_TIMESTAMP, 3));
    repository.save(new CommentWithUser(someUser, "Second comment", SOME_TIMESTAMP, 2));
    final CommentWithUser third = repository.save(new CommentWithUser(someUser, "Third comment", SOME_TIMESTAMP, 1));

    //when
    final Page<CommentWithUser> page = repository.findAll(new PageRequest(1, 2, ASC, "contents"));

    //then
    assertThat(page.getTotalElements()).isEqualTo(3);
    assertThat(page.getTotalPages()).isEqualTo(2);
    assertThat(page.getContent()).containsExactly(third);
  }

  @Test
  public void shouldDeleteCommentWithoutDeletingUser() throws Exception {
    //given
    final CommentWithUser comment = repository.save(new CommentWithUser(someUser, "First comment", SOME_TIMESTAMP, 3));

    //when
    repository.delete(comment);

    //then
    assertThat(repository.count()).isZero();
    assertThat(userRepository.exists(SOME_USER)).isTrue();
  }

  @Test
  public void shouldUpdateCommentByAttachingDifferentUser() throws Exception {
    //given
    final User firstUser = userRepository.save(new User("First user", SOME_DATE, 10, false));
    final CommentWithUser comment = repository.save(new CommentWithUser(someUser, "First comment", SOME_TIMESTAMP, 3));

    //when
    comment.setUser(firstUser);
    repository.save(comment);

    //then
    assertThat(repository.count()).isEqualTo(1);
    final CommentWithUser foundComment = repository.findOne(comment.getId());
    assertThat(foundComment.getUser()).isEqualTo(firstUser);
  }

  @Test
  public void shouldDeleteAllCommentsWithoutDeletingUsers() throws Exception {
    //given
    final CommentWithUser first = repository.save(new CommentWithUser(someUser, "First comment", SOME_TIMESTAMP, 3));
    final CommentWithUser second = repository.save(new CommentWithUser(someUser, "Second comment", SOME_TIMESTAMP, 2));
    final CommentWithUser third = repository.save(new CommentWithUser(someUser, "Third comment", SOME_TIMESTAMP, 1));

    //when
    repository.deleteAll();

    //then
    assertThat(repository.count()).isZero();
    assertThat(userRepository.exists(SOME_USER)).isTrue();
  }

}
TOP

Related Classes of com.nurkiewicz.jdbcrepository.JdbcRepositoryManyToOneTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.