package net.rdrei.android.scdl2.test; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import com.google.inject.AbstractModule; import com.google.inject.Injector; import net.rdrei.android.scdl2.ApplicationPreferences; import net.rdrei.android.scdl2.R; import net.rdrei.android.scdl2.api.MediaState; import net.rdrei.android.scdl2.api.entity.TrackEntity; import net.rdrei.android.scdl2.api.entity.UserEntity; import net.rdrei.android.scdl2.guice.ActivityLayoutInflater; import net.rdrei.android.scdl2.ui.AdViewManager; import net.rdrei.android.scdl2.ui.DownloadActivity; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import org.robolectric.shadows.ShadowActivity; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.startsWith; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) public class DownloadActivityTest { @Before public void setUp() { final AbstractModule module = new AbstractModule() { @Override protected void configure() { final Injector injector = TestHelper.getInjector(); final AdViewManagerStub adViewManagerStub = new AdViewManagerStub( injector.getProvider(ApplicationPreferences.class), new ActivityLayoutInflater( Robolectric.buildActivity(Activity.class).create().get())); this.bind(AdViewManager.class).toInstance(adViewManagerStub); } }; TestHelper.overridenInjector(this, module); } @Test public void smokeTestOnCreate() { final DownloadActivity activity = Robolectric.buildActivity(DownloadActivity.class) .attach() .create() .get(); assertThat(activity, notNullValue()); } @Test public void purchaseFlow() { final TrackEntity track = new TrackEntity(); final UserEntity user = new UserEntity(); final String downloadUrl = "http://3lau.to/downloadstuff"; user.setUsername("awesomesauce"); track.setDownloadable(false); track.setUser(user); track.setPurchaseUrl(downloadUrl); final Bundle bundle = new Bundle(); bundle.putParcelable(DownloadActivity.MEDIA_STATE_TAG, MediaState.fromEntity(track)); final DownloadActivity activity = Robolectric.buildActivity(DownloadActivity.class) .attach() .create(bundle) .start() .resume() .get(); final View button = activity.findViewById(R.id.btn_download); assertTrue(button.isEnabled()); button.performClick(); final ShadowActivity shadowActivity = Robolectric.shadowOf(activity); final Intent nextIntent = shadowActivity.getNextStartedActivity(); assertThat(nextIntent.getAction(), equalTo("android.intent.action.VIEW")); assertThat(nextIntent.toUri(0), startsWith(downloadUrl)); } @Test public void invalidPurchaseRegression() { final TrackEntity track = new TrackEntity(); final UserEntity user = new UserEntity(); // Notice capital H here. final String downloadUrl = "Http://not-a-link"; user.setUsername("awesomesauce"); track.setDownloadable(false); track.setUser(user); track.setPurchaseUrl(downloadUrl); final Bundle bundle = new Bundle(); bundle.putParcelable(DownloadActivity.MEDIA_STATE_TAG, MediaState.fromEntity(track)); final DownloadActivity activity = Robolectric.buildActivity(DownloadActivity.class) .attach() .create(bundle) .start() .resume() .get(); final View button = activity.findViewById(R.id.btn_download); assertFalse(button.isEnabled()); } }