package com.querydsl.hazelcast;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.querydsl.core.types.Predicate;
import com.querydsl.hazelcast.domain.QUser;
import com.querydsl.hazelcast.domain.User;
public class HazelcastQueryTest {
private final QUser user = QUser.user;
static User u1, u2, u3, u4;
private static IMap<String, User> map;
@BeforeClass
public static void setUp() throws Exception {
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
map = hz.getMap("users");
fillTable();
}
@AfterClass
public static void tearDown() throws Exception {
Hazelcast.shutdownAll();
}
public static void fillTable() throws UnknownHostException {
map.clear();
u1 = addUser("Jaakko", "Jantunen", 20, User.Gender.MALE, null);
u2 = addUser("Jaakki", "Jantunen", 30, User.Gender.FEMALE, "One detail");
u3 = addUser("Jaana", "Aakkonen", 40, User.Gender.MALE, "No details");
u4 = addUser("Jaana", "BeekkoNen", 50, User.Gender.FEMALE, null);
}
private static User addUser(String first, String last, int age, User.Gender gender, String details) {
User user = new User(first, last, age, new Date());
user.setId(UUID.randomUUID().toString());
user.setGender(gender);
user.setDetails(details);
map.put(user.getId(), user);
System.out.println(user.getId());
return user;
}
@Test
public void eq() {
User u = where(user.firstName.eq("Jaakko")).fetchOne();
assertThat(u, equalTo(u1));
}
@Test
public void eqNot() {
List<User> result = where(user.firstName.eq("Jaakko").not()).fetch();
assertThat(result, containsInAnyOrder(u2, u3, u4));
}
@Test
public void like() {
List<User> result = where(user.firstName.like("%aakk%")).fetch();
assertThat(result, containsInAnyOrder(u1, u2));
}
@Test
public void notEq() {
List<User> result = where(user.lastName.ne("Jantunen")).fetch();
assertThat(result, containsInAnyOrder(u3, u4));
}
@Test
public void between() {
List<User> result = where(user.age.between(29, 41)).fetch();
assertThat(result, containsInAnyOrder(u3, u2));
}
@Test
public void greaterOrEquals() {
List<User> result = where(user.age.goe(40)).fetch();
assertThat(result, containsInAnyOrder(u3, u4));
}
@Test
public void greaterThen() {
List<User> result = where(user.age.gt(20)).fetch();
assertThat(result, containsInAnyOrder(u2, u3, u4));
}
@Test
public void lowerOrEquals() {
List<User> result = where(user.age.loe(20)).fetch();
assertThat(result, containsInAnyOrder(u1));
}
@Test
public void lowerThen() {
List<User> result = where(user.age.lt(40)).fetch();
assertThat(result, containsInAnyOrder(u1, u2));
}
@Test
public void in() {
List<User> result = where(user.age.in(40, 15)).fetch();
assertThat(result, containsInAnyOrder(u3));
}
@Test
public void notIn() {
List<User> result = where(user.gender.notIn(User.Gender.MALE, User.Gender.FEMALE)).fetch();
assertThat(result, hasSize(0));
}
@Test
public void isNull() {
List<User> result = where(user.details.isNull()).fetch();
assertThat(result, containsInAnyOrder(u1, u4));
}
@Test
public void isNotNull() {
List<User> result = where(user.details.isNotNull()).fetch();
assertThat(result, containsInAnyOrder(u2, u3));
}
@Test
public void and() {
User result = where(user.firstName.eq("Jaana"), user.age.eq(50)).fetchOne();
assertThat(result, equalTo(u4));
}
@Test
public void or() {
List<User> result = where(
user.firstName.eq("Jaakko").or(user.lastName.eq("BeekkoNen")))
.fetch();
assertThat(result, containsInAnyOrder(u1, u4));
}
@Test(expected = UnsupportedOperationException.class)
public void coalesce() {
where(user.details.coalesce("").asString().isNotNull()).fetch();
}
@Test(expected = UnsupportedOperationException.class)
public void caseWhenThen() {
where(user.firstName.when("Jaakko").then(1).otherwise(2).eq(5)).fetch();
}
private AbstractIMapQuery<User> query() {
return new IMapValueQuery<User>(map);
}
private AbstractIMapQuery<User> where(Predicate... e) {
return query().where(e);
}
}