package org.gdg.frisbee.android.activity; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; import android.support.annotation.NonNull; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import org.assertj.core.api.Condition; import org.gdg.frisbee.android.Const; import org.gdg.frisbee.android.onboarding.StartActivity; import org.junit.Test; import org.junit.runner.RunWith; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @RunWith(AndroidJUnit4.class) public class IntentFilterTest { private static final Uri URI_GDG_BRUSSELS = Uri.parse("https://developers.google.com/groups/chapter/105068877693379070381/"); @Test public void developerGroupsLaunchesMainActivity() throws PackageManager.NameNotFoundException { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(URI_GDG_BRUSSELS); final List<ResolveInfo> activities = InstrumentationRegistry.getTargetContext().getPackageManager().queryIntentActivities(intent, 0); assertThat(activities).areAtLeastOne(ofType(StartActivity.class)); } @Test public void mainActivityDoesNotLaunchWithInvalidUri() throws PackageManager.NameNotFoundException { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("https")); final List<ResolveInfo> activities = InstrumentationRegistry.getTargetContext().getPackageManager().queryIntentActivities(intent, 0); assertThat(activities).areNot(ofType(StartActivity.class)); } @Test public void gdgroupsEventsLinkWithoutIdLaunchesParseDeepLinkActivity() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(Const.URL_GDGROUPS_ORG + "/" + Const.PATH_GDGROUPS_ORG_EVENT + "/")); final List<ResolveInfo> activities = InstrumentationRegistry.getTargetContext().getPackageManager().queryIntentActivities(intent, 0); assertThat(activities).areAtLeastOne(ofType(ParseDeepLinkActivity.class)); } @Test public void gdgroupsEventsLinkLaunchesParseDeepLinkActivity() { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(Const.URL_GDGROUPS_ORG + "/" + Const.PATH_GDGROUPS_ORG_EVENT + "/xyz")); final List<ResolveInfo> activities = InstrumentationRegistry.getTargetContext().getPackageManager().queryIntentActivities(intent, 0); assertThat(activities).areAtLeastOne(ofType(ParseDeepLinkActivity.class)); } @NonNull private static Condition<ResolveInfo> ofType(final Class<? extends Activity> activityClass) { return new Condition<ResolveInfo>() { @Override public boolean matches(final ResolveInfo value) { return activityClass.getName().equals(value.activityInfo.name); } }; } }