package com.kickstarter;
import android.content.Context;
import android.support.annotation.NonNull;
import com.kickstarter.libs.Environment;
import com.kickstarter.libs.KSString;
import com.kickstarter.libs.Koala;
import com.kickstarter.libs.MockCurrentConfig;
import com.kickstarter.libs.MockTrackingClient;
import com.kickstarter.services.MockApiClient;
import com.kickstarter.services.MockWebClient;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.multidex.ShadowMultiDex;
import rx.observers.TestSubscriber;
@RunWith(KSRobolectricGradleTestRunner.class)
@Config(constants = BuildConfig.class, shadows = ShadowMultiDex.class, sdk = KSRobolectricGradleTestRunner.DEFAULT_SDK)
public abstract class KSRobolectricTestCase extends TestCase {
private TestKSApplication application;
public TestSubscriber<String> koalaTest;
private Environment environment;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
final MockTrackingClient testTrackingClient = new MockTrackingClient();
koalaTest = new TestSubscriber<>();
testTrackingClient.eventNames.subscribe(koalaTest);
environment = application().component().environment().toBuilder()
.apiClient(new MockApiClient())
.currentConfig(new MockCurrentConfig())
.webClient(new MockWebClient())
.koala(new Koala(testTrackingClient))
.build();
}
protected @NonNull TestKSApplication application() {
if (application != null) {
return application;
}
application = (TestKSApplication) RuntimeEnvironment.application;
return application;
}
protected @NonNull Context context() {
return application().getApplicationContext();
}
protected @NonNull Environment environment() {
return environment;
}
protected @NonNull KSString ksString() {
return new KSString(application().getPackageName(), application().getResources());
}
}