package com.tevinjeffrey.rutgersct.rutgersapi;
import com.tevinjeffrey.rutgersct.TestModule;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Course;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Request;
import com.tevinjeffrey.rutgersct.rutgersapi.model.Subject;
import com.tevinjeffrey.rutgersct.utils.TestConts;
import com.tevinjeffrey.rutgersct.utils.BackgroundThread;
import org.junit.Before;
import org.junit.Test;
import javax.inject.Inject;
import dagger.ObjectGraph;
import rx.Observable;
import rx.Scheduler;
import rx.functions.Action1;
import static org.junit.Assert.assertTrue;
public class RetroRutgersTest {
RetroRutgers retroRutgers;
@Inject
@BackgroundThread
Scheduler backgroundThread;
@Inject
RetroRutgersService rutgersService;
@Before
public void setUp() throws Exception {
ObjectGraph og = ObjectGraph.create(new TestModule());
og.inject(this);
retroRutgers = new RetroRutgers(rutgersService, backgroundThread);
}
@Test
public void testNewark() {
getSubjectAndCourses(TestConts.requestNewark);
}
@Test
public void testNewBruswick() {
getSubjectAndCourses(TestConts.requestBrunswick);
}
@Test
public void testCamden() {
getSubjectAndCourses(TestConts.requestCamden);
}
@Test
public void testFall() {
getSubjectAndCourses(TestConts.requestAllFall);
}
@Test
public void testWinter() {
getSubjectAndCourses(TestConts.requestAllWinter);
}
@Test
public void testSpring() {
getSubjectAndCourses(TestConts.requestAllSpring);
}
@Test
public void testSummer() {
getSubjectAndCourses(TestConts.requestAllSummer);
}
@Test
public void testPrimarySemester() {
getSubjectAndCourses(TestConts.getPrimarySemesterRequest());
}
private void getSubjectAndCourses(Request request) {
testSubject(request);
testCourse(request);
}
private void testSubject(Request request) {
Observable.from(retroRutgers.getSubjects(request)
.toBlocking().first()).forEach(new Action1<Subject>() {
@Override
public void call(Subject subject) {
assertTrue(subjectFailCases(subject));
}
});
}
private void testCourse(Request request) {
Observable.from(retroRutgers.getCourses(request)
.toBlocking().first()).forEach(new Action1<Course>() {
@Override
public void call(Course course) {
assertTrue(courseFailCases(course));
}
});
}
public boolean courseFailCases(Course course) {
Course.Section section = course.getSections().get(0);
return course.getSubject() != null &&
course.getCourseNumber() != null &&
section.getIndex() != null &&
section.getNumber() != null &&
section.getExamCode() != null;
}
public boolean subjectFailCases(Subject subject) {
return subject.getDescription() != null &&
subject.getCode() != null;
}
}