package com.github.florent37.rxandroidorm.sample; import com.github.florent37.rxandroidorm.sample.model.Cat; import com.github.florent37.rxandroidorm.sample.model.CatDatabase; import com.github.florent37.rxandroidorm.sample.model.Dog; import com.github.florent37.rxandroidorm.sample.model.DogDatabase; import com.github.florent37.rxandroidorm.sample.model.User; import com.github.florent37.rxandroidorm.sample.model.UserColumns; import com.github.florent37.rxandroidorm.sample.model.UserDatabase; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.util.Arrays; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import io.reactivex.functions.Consumer; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.spy; /** * Created by florentchampigny on 05/02/2016. */ @RunWith(CustomRobolectricTestRunner.class) public class UserQueryBuilderTest { UserDatabase userEntityManager; CatDatabase catEntityManager; DogDatabase dogEntityManager; @Before public void setUp() throws Exception { userEntityManager = spy(new UserDatabase()); userEntityManager.deleteAll().subscribe(); catEntityManager = spy(new CatDatabase()); catEntityManager.deleteAll().subscribe(); dogEntityManager = spy(new DogDatabase()); dogEntityManager.deleteAll().subscribe(); } @Test public void testSelectUserFromAge() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(30, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); User userFromBase = userEntityManager.select().age().equalsTo(21).first().blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.getName()).isEqualTo("florent"); } @Test public void testSelectUsersFromAge_equals() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().age().equalsTo(21).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(2); } @Test public void testSelectUsersFromAge_notEquals() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().age().notEqualsTo(21).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(1); assertThat(usersFromBase.get(0).getName()).isEqualTo("alex"); } @Test public void testSelectUsersFromAge_greather() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().age().greatherThan(10).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(2); } @Test public void testSelectUsersFromAge_less() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().age().lessThan(20).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(1); } @Test public void testSelectUsersFromAge_between() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().age().between(9, 20).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(1); } @Test public void testSelectUsersFromAge_in() { //given List<User> users = Arrays.asList( new User(1, "a"), new User(3, "b"), new User(5, "c"), new User(1, "d"), new User(10, "e"), new User(11, "f") ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().age().in(1, 10).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(3); } @Test public void testSelectUsersFromName_in() { //given List<User> users = Arrays.asList( new User(1, "a"), new User(3, "b"), new User(5, "a"), new User(1, "e"), new User(10, "e"), new User(11, "f") ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().name().in("a", "e").asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(4); } @Test public void testSelectUserFromBoolean_equalsTrue() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(30, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); User userFromBase = userEntityManager.select().hacker() .equalsTo(true) .first() .blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.getName()).isEqualTo("florent"); } @Test public void testSelectUser_or() { //given List<User> users = Arrays.asList( new User(21, "florent", null, null, false), new User(30, "kevin", null, null, true), new User(10, "alex", null, null, false) ); //when userEntityManager.add(users).subscribe(); List<User> userFromBase = userEntityManager.select() .name().equalsTo("florent") .or() .hacker().isTrue() .asObservable().blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase).hasSize(2); } @Test public void testSelectUser_group() { //given List<User> users = Arrays.asList( new User(10, "florent", null, null, false), new User(30, "kevin", null, null, true), new User(20, "mimi", null, null, true), new User(10, "alex", null, null, false) ); //when userEntityManager.add(users).subscribe(); List<User> userFromBase = userEntityManager.select() .beginGroup() .name().equalsTo("florent") .or() .hacker().isTrue() .endGroup() .and() .age().equalsTo(20) .asObservable().blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase).hasSize(1); assertThat(userFromBase.get(0).getName()).isEqualTo("mimi"); } @Test public void testSelectUser_orderAgeASC() { //given List<User> users = Arrays.asList( new User(21, "florent", null, null, false), new User(30, "kevin", null, null, true), new User(10, "alex", null, null, false) ); //when userEntityManager.add(users).subscribe(); List<User> userFromBase = userEntityManager.select() .sortAsc(UserColumns.age) .asObservable().blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.get(0).getName()).isEqualTo("alex"); assertThat(userFromBase.get(1).getName()).isEqualTo("florent"); assertThat(userFromBase.get(2).getName()).isEqualTo("kevin"); } @Test public void testSelectUser_orderAgeDESC() { //given List<User> users = Arrays.asList( new User(21, "florent", null, null, false), new User(30, "kevin", null, null, true), new User(10, "alex", null, null, false) ); //when userEntityManager.add(users).subscribe(); List<User> userFromBase = userEntityManager.select() .sortDesc(UserColumns.age) .asObservable().blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.get(0).getName()).isEqualTo("kevin"); assertThat(userFromBase.get(1).getName()).isEqualTo("florent"); assertThat(userFromBase.get(2).getName()).isEqualTo("alex"); } @Test public void testSelectUserFromBoolean_isTrue() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(30, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); User userFromBase = userEntityManager.select() .hacker().isTrue() .first() .blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.getName()).isEqualTo("florent"); } @Test public void testSelectUserFromBoolean_equalsFalse() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(30, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); User userFromBase = userEntityManager.select() .hacker().equalsTo(false) .first().blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.getName()).isEqualTo("alex"); } @Test public void testSelectUserFromBoolean_isFalse() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(30, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); User userFromBase = userEntityManager.select() .hacker().isFalse() .first() .blockingFirst(); //then assertThat(userFromBase).isNotNull(); assertThat(userFromBase.getName()).isEqualTo("alex"); } @Test public void testSelectUsersFromCat_stringEquals() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().cat(CatDatabase.where().shortName().equalsTo("Java")).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(1); assertThat(usersFromBase.get(0).getName()).isEqualTo("florent"); } @Test public void testSelectUsersFromCat_stringNotEquals() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Futé"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().cat(CatDatabase.where().shortName().notEqualsTo("Java")).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(2); } @Test public void testSelectUsersFromCat_stringContains() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Jorris"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().cat(CatDatabase.where().shortName().contains("J")).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(2); assertThat(usersFromBase.get(0).getName()).isEqualTo("florent"); assertThat(usersFromBase.get(1).getName()).isEqualTo("kevin"); } @Test public void testSelectUsersFromCat_stringLike() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("Java"), Arrays.asList(new Dog("Loulou")), true), new User(21, "kevin", new Cat("Lava"), Arrays.asList(new Dog("Darty")), true), new User(10, "alex", new Cat("Yellow"), Arrays.asList(new Dog("Darty"), new Dog("Sasha")), false) ); //when userEntityManager.add(users).subscribe(); List<User> usersFromBase = userEntityManager.select().cat(CatDatabase.where().shortName().contains("%av%")).asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(2); assertThat(usersFromBase.get(0).getName()).isEqualTo("florent"); assertThat(usersFromBase.get(1).getName()).isEqualTo("kevin"); } @Test public void testSelectUsers_withoutAgeColumns() { //given List<User> users = Arrays.asList( new User(21, "florent", null, null, true), new User(21, "kevin", null, null, true), new User(10, "alex", null, null, false) ); userEntityManager.add(users).subscribe(); //when List<User> usersFromBase = userEntityManager .select() .fields(UserColumns.name, UserColumns.cat, UserColumns.dogs, UserColumns.hacker) .asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(3); assertThat(usersFromBase.get(0).getName()).isEqualTo("florent"); assertThat(usersFromBase.get(0).getAge()).isEqualTo(0); assertThat(usersFromBase.get(1).getName()).isEqualTo("kevin"); assertThat(usersFromBase.get(1).getAge()).isEqualTo(0); assertThat(usersFromBase.get(2).getName()).isEqualTo("alex"); assertThat(usersFromBase.get(2).getAge()).isEqualTo(0); } @Test public void testSelectUsers_withoutNameCollumns() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("nnn"), Arrays.asList(new Dog("a"), new Dog("b")), true), new User(21, "kevin", null, null, true), new User(10, "alex", null, null, false) ); userEntityManager.add(users).subscribe(); //when List<User> usersFromBase = userEntityManager .select() .fieldsWithout(UserColumns.name) .asObservable().blockingFirst(); //then assertThat(usersFromBase).isNotNull(); assertThat(usersFromBase).hasSize(3); assertThat(usersFromBase.get(0).getName()).isNull(); assertThat(usersFromBase.get(0).getAge()).isNotNull(); assertThat(usersFromBase.get(0).getCat()).isNotNull(); assertThat(usersFromBase.get(0).getDogs()).isNotNull(); assertThat(usersFromBase.get(1).getName()).isNull(); assertThat(usersFromBase.get(2).getName()).isNull(); } @Test public void testSelectUsers_asObservable() { //given List<User> users = Arrays.asList( new User(21, "florent", new Cat("nnn"), Arrays.asList(new Dog("a"), new Dog("b")), true), new User(21, "kevin", null, null, true), new User(10, "alex", null, null, false) ); userEntityManager.add(users).subscribe(); final AtomicInteger numberOfUsers = new AtomicInteger(); //when userEntityManager .select() .asObservable() .subscribe(new Consumer<List<User>>() { @Override public void accept(List<User> users) { numberOfUsers.set(users.size()); } }); //then assertThat(numberOfUsers.get()).isEqualTo(3); } @Test public void testSelectUsers_limit() { //given List<User> users = Arrays.asList( new User(21, "a", null, null, true), new User(21, "b", null, null, true), new User(21, "c", null, null, true), new User(21, "d", null, null, true), new User(21, "e", null, null, true),//4 new User(21, "f", null, null, true), new User(21, "g", null, null, true), new User(21, "h", null, null, true), new User(21, "i", null, null, true), new User(21, "j", null, null, true), new User(21, "k", null, null, true), new User(21, "l", null, null, true), new User(21, "m", null, null, true) ); userEntityManager.add(users).subscribe(); //when List<User> usersFromBase = userEntityManager .select() .limit(4,5) .asObservable().blockingFirst(); //then assertThat(usersFromBase.size()).isEqualTo(5); assertThat(usersFromBase.get(0).getName()).isEqualTo("e"); } }