package com.thebluealliance.androidclient.di;
import com.google.gson.Gson;
import com.thebluealliance.androidclient.api.ApiConstants;
import com.thebluealliance.androidclient.api.rx.TbaApiV2;
import com.thebluealliance.androidclient.api.rx.TbaApiV3;
import com.thebluealliance.androidclient.database.Database;
import com.thebluealliance.androidclient.datafeed.APICache;
import com.thebluealliance.androidclient.datafeed.CacheableDatafeed;
import com.thebluealliance.androidclient.datafeed.HttpModule;
import com.thebluealliance.androidclient.datafeed.refresh.RefreshController;
import com.thebluealliance.androidclient.datafeed.retrofit.FirebaseAPI;
import com.thebluealliance.androidclient.datafeed.retrofit.GitHubAPI;
import com.thebluealliance.androidclient.datafeed.retrofit.LenientGsonConverterFactory;
import com.thebluealliance.androidclient.datafeed.status.TBAStatusController;
import com.thebluealliance.androidclient.fragments.FirebaseTickerFragment;
import org.mockito.Mockito;
import android.content.Context;
import android.content.SharedPreferences;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import okhttp3.Cache;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import static org.mockito.Mockito.when;
@Module(includes = MockTbaAndroidModule.class)
public class MockDatafeedModule {
@Provides @Singleton @Named("tba_retrofit")
public Retrofit provideTBARetrofit(
Gson gson,
OkHttpClient okHttpClient,
SharedPreferences prefs) {
return new Retrofit.Builder()
.baseUrl(ApiConstants.TBA_URL)
.client(okHttpClient)
.addConverterFactory(LenientGsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
@Provides @Singleton @Named("github_retrofit")
public Retrofit provideGithubRetrofit(
Gson gson,
OkHttpClient okHttpClient) {
return new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.client(okHttpClient)
.addConverterFactory(LenientGsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
@Provides @Singleton @Named("tba_api")
public TbaApiV2 provideRxTBAAPI(@Named("tba_retrofit") Retrofit retrofit) {
return Mockito.mock(TbaApiV2.class);
}
@Provides @Singleton @Named("tba_apiv3_rx")
public TbaApiV3 provideRxApiv3() {
return Mockito.mock(TbaApiV3.class);
}
@Provides @Singleton @Named("tba_apiv3_call")
public com.thebluealliance.androidclient.api.call.TbaApiV3 provideCallApiV3() {
return Mockito.mock(com.thebluealliance.androidclient.api.call.TbaApiV3.class);
}
@Provides @Singleton
public com.thebluealliance.androidclient.api.call.TbaApiV2 provideTBAAPI(@Named("tba_retrofit") Retrofit retrofit) {
return Mockito.mock(com.thebluealliance.androidclient.api.call.TbaApiV2.class);
}
@Provides @Singleton @Named("github_api")
public GitHubAPI provideGitHubAPI(@Named("github_retrofit") Retrofit retrofit) {
return Mockito.mock(GitHubAPI.class);
}
@Provides @Singleton @Named("firebase_retrofit")
public Retrofit provideFirebaseRetrofit(Context context, Gson gson, OkHttpClient okHttpClient) {
String firebaseUrl = FirebaseTickerFragment.FIREBASE_URL_DEFAULT;
return new Retrofit.Builder()
.baseUrl(firebaseUrl)
.client(okHttpClient)
.addConverterFactory(LenientGsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
}
@Provides @Singleton @Named("firebase_api")
public FirebaseAPI provideFirebaseAPI(@Named("firebase_retrofit") Retrofit retrofit) {
return Mockito.mock(FirebaseAPI.class);
}
@Provides @Singleton
public Gson provideGson() {
return HttpModule.getGson();
}
@Provides @Singleton
public Cache provideOkCache(Context context) {
return new Cache(context.getCacheDir(), HttpModule.CACHE_SIZE);
}
@Provides @Singleton
public OkHttpClient getOkHttp(Cache responseCache) {
return Mockito.mock(OkHttpClient.class);
}
@Provides @Singleton
public APICache provideApiCache(Database db) {
return Mockito.mock(APICache.class);
}
@Provides @Singleton
public CacheableDatafeed provideDatafeed(APICache cache) {
CacheableDatafeed df = Mockito.mock(CacheableDatafeed.class);
when(df.getCache()).thenReturn(cache);
return df;
}
@Provides @Singleton
public RefreshController provideRefreshController() {
return Mockito.mock(RefreshController.class);
}
@Provides @Singleton
public TBAStatusController provideTbaStatusController(SharedPreferences prefs, Gson gson,
Cache cache, Context context) {
return Mockito.mock(TBAStatusController.class);
}
}