package com.tevinjeffrey.rutgersct;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.otto.Bus;
import com.tevinjeffrey.rutgersct.database.DatabaseHandler;
import com.tevinjeffrey.rutgersct.database.MockDatabaseHandler;
import com.tevinjeffrey.rutgersct.rutgersapi.RetroRutgers;
import com.tevinjeffrey.rutgersct.rutgersapi.RetroRutgersService;
import com.tevinjeffrey.rutgersct.rutgersapi.RetroRutgersTest;
import com.tevinjeffrey.rutgersct.ui.chooser.ChooserPresenter;
import com.tevinjeffrey.rutgersct.ui.chooser.ChooserPresenterImpl;
import com.tevinjeffrey.rutgersct.ui.course.CoursePresenterImpl;
import com.tevinjeffrey.rutgersct.ui.course.CoursePresenterImplTest;
import com.tevinjeffrey.rutgersct.ui.courseinfo.CourseInfoFragment;
import com.tevinjeffrey.rutgersct.ui.sectioninfo.SectionInfoPresenterImpl;
import com.tevinjeffrey.rutgersct.ui.sectioninfo.SectionInfoPresenterImplTest;
import com.tevinjeffrey.rutgersct.ui.subject.SubjectPresenterImplTest;
import com.tevinjeffrey.rutgersct.ui.trackedsections.TrackedSectionsPresenterImplTest;
import com.tevinjeffrey.rutgersct.ui.subject.SubjectPresenterImpl;
import com.tevinjeffrey.rutgersct.ui.trackedsections.TrackedSectionsPresenterImpl;
import com.tevinjeffrey.rutgersct.utils.AndroidMainThread;
import com.tevinjeffrey.rutgersct.utils.BackgroundThread;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import retrofit.RestAdapter;
import retrofit.client.OkClient;
import retrofit.converter.GsonConverter;
import rx.Scheduler;
import rx.schedulers.Schedulers;
import static org.mockito.Mockito.mock;
@Module(injects = {
TrackedSectionsPresenterImplTest.class,
TrackedSectionsPresenterImpl.class,
SubjectPresenterImplTest.class,
SubjectPresenterImpl.class,
SectionInfoPresenterImpl.class,
SectionInfoPresenterImplTest.class,
CoursePresenterImplTest.class,
CoursePresenterImpl.class,
ChooserPresenterImpl.class,
CoursePresenterImplTest.class,
RetroRutgersTest.class
}
, library = true
, complete = false)
public class TestModule {
@Provides
@Singleton
public Bus provideBus() {
return mock(Bus.class);
}
@Provides
@Singleton
public DatabaseHandler provideDatabaseHandler() {
return new MockDatabaseHandler();
}
@Provides
@Singleton
public RetroRutgers providesRetroRutgers(RetroRutgersService service, @BackgroundThread Scheduler thread) {
return new RetroRutgers(service, thread);
}
@Provides
@Singleton
public RetroRutgersService providesRutgersRestAdapter(OkHttpClient client, Gson gson) {
OkHttpClient okClient = client.clone();
return new RestAdapter.Builder()
.setEndpoint("http://sis.rutgers.edu/soc/")
.setLogLevel(RestAdapter.LogLevel.HEADERS_AND_ARGS)
.setClient(new OkClient(okClient))
.setConverter(new GsonConverter(gson))
.build().create(RetroRutgersService.class);
}
@Provides
@Singleton
public Gson providesGson() {
return new GsonBuilder()
.serializeNulls()
.setPrettyPrinting()
.create();
}
@Provides
@Singleton
public OkHttpClient providesOkHttpClient() {
return new OkHttpClient();
}
@Provides
@Singleton
@AndroidMainThread
public Scheduler provideAndroidMainThread() {
return Schedulers.immediate();
}
@Provides
@Singleton
@BackgroundThread
public Scheduler provideBackgroundThread() {
return Schedulers.immediate();
}
}