package com.querydsl.example.jpa.repository; import com.google.common.collect.Lists; import com.querydsl.example.jpa.model.Tweet; import com.querydsl.example.jpa.model.User; import org.junit.Test; import javax.inject.Inject; import java.util.Collections; import java.util.List; import static com.querydsl.example.jpa.model.QTweet.tweet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class TweetRepositoryTest extends AbstractPersistenceTest { @Inject private TweetRepository repository; @Inject private UserRepository userRepository; @Test public void save_and_find_by_id() { User poster = new User("dr_frank"); userRepository.save(poster); String content = "I am alive! #YOLO"; Tweet tweet = new Tweet(poster, content, Collections.<User>emptyList(), null); repository.save(tweet); assertEquals(content, repository.findById(tweet.getId()).getContent()); } @Test public void find_list_by_predicate() { User poster = new User("dr_frank"); userRepository.save(poster); repository.save(new Tweet(poster, "It is a alive! #YOLO", Collections.<User>emptyList(), null)); repository.save(new Tweet(poster, "Oh the humanity!", Collections.<User>emptyList(), null)); repository.save(new Tweet(poster, "#EpicFail", Collections.<User>emptyList(), null)); assertEquals(1, repository.findAll(tweet.content.contains("#YOLO")).size()); } @Test public void find_list_by_complex_predicate() { List<String> usernames = Lists.newArrayList("dr_frank", "mike", "maggie", "liza"); List<User> users = Lists.newArrayList(); for (String username : usernames) { users.add(userRepository.save(new User(username))); } User poster = new User("duplo"); userRepository.save(poster); for (int i = 0; i < 100; ++i) { repository.save(new Tweet(poster, "spamming @dr_frank " + i, users.subList(0, 1), null)); } assertTrue(repository.findAll(tweet.mentions.contains(users.get(1))).isEmpty()); assertEquals(100, repository.findAll(tweet.mentions.contains(users.get(0))).size()); assertTrue(repository.findAll(tweet.mentions.any().username.eq("duplo")).isEmpty()); assertEquals(100, repository.findAll(tweet.mentions.any().username.eq("dr_frank")).size()); } }