package com.github.florent37.rxandroidorm.sample;
import android.util.Log;
import com.github.florent37.rxandroidorm.sample.model.CatDatabase;
import com.github.florent37.rxandroidorm.sample.model.Computer;
import com.github.florent37.rxandroidorm.sample.model.ComputerDatabase;
import com.github.florent37.rxandroidorm.sample.model.DogDatabase;
import com.github.florent37.rxandroidorm.sample.model.Software;
import com.github.florent37.rxandroidorm.sample.model.SoftwareDatabase;
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 io.reactivex.Observable;
import io.reactivex.annotations.NonNull;
import io.reactivex.functions.Predicate;
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 RxUserTest {
UserDatabase userEntityManager;
ComputerDatabase computerDb;
@Before
public void setUp() throws Exception {
userEntityManager = spy(new UserDatabase());
userEntityManager.deleteAll().subscribe();
computerDb = spy(new ComputerDatabase());
Observable.zip(
userEntityManager.deleteAll(),
computerDb.deleteAll(),
(aBoolean, aBoolean2) -> aBoolean)
.subscribe();
}
@Test
public void testAdd_one() {
userEntityManager.add(new User(21, "florent"))
.flatMap(user -> userEntityManager.count())
.test()
.assertValue(1);
}
@Test
public void testAdd_two() {
userEntityManager.add(new User(1, "florent"))
.flatMap(user -> userEntityManager.add(new User(2, "kevin")))
.flatMap(user1 -> userEntityManager.count())
.test()
.assertValue(2);
}
@Test
public void testAdd_list() {
userEntityManager.add(Arrays.asList(new User(21, "florent"), new User(22, "kevin")))
.flatMap(user -> userEntityManager.count())
.test()
.assertValue(2);
}
@Test
public void testAdd_then_select() {
userEntityManager.add(Arrays.asList(new User(21, "florent"), new User(22, "kevin")))
.flatMap(user -> userEntityManager.select().age().equalsTo(21).first())
.map(User::getName)
.test()
.assertValue("florent");
}
@Test
public void testComputer() {
Observable.fromArray(
new Computer(Computer.WINDOWS, "MasterRace", Arrays.asList(new Software("Photoshop"))),
new Computer(Computer.WINDOWS, "Gamerz"),
new Computer(Computer.LINUX, "MasterRace", Arrays.asList(new Software("Gimp"))))
.flatMap(computerDb::add)
.subscribe();
Observable.just(new Computer(Computer.MAC, "Mac Mini"))
.flatMap(computerDb::add)
.doOnNext(computer -> computer.setSoftwares(Arrays.asList(new Software("Photoshop"))))
.flatMap(computerDb::update)
.subscribe();
computerDb.select()
.label().equalsTo("MasterRace")
.or()
.softwares(SoftwareDatabase.where().name().equalsTo("Photoshop"))
.asObservable()
.test()
.assertValue(new Predicate<List<Computer>>() {
@Override
public boolean test(@NonNull List<Computer> computers) throws Exception {
return computers.size() == 3;
}
});
}
}