package com.mixpanel.android.mpmetrics;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.test.AndroidTestCase;
import java.util.HashMap;
import java.util.Map;
public class GCMReceiverTest extends AndroidTestCase {
@Override
public void setUp() throws PackageManager.NameNotFoundException {
// ACTION_BUG_REPORT is chosen because it's identifiably weird
final Intent defaultIntent = new Intent(Intent.ACTION_BUG_REPORT);
mGcmReceiver = new TestGCMReceiver(defaultIntent);
final Map<String, Integer> resources = new HashMap<String, Integer>();
resources.put("ic_pretend_icon", 12345);
mResourceIds = new TestUtils.TestResourceIds(resources);
mGoodUri = Uri.parse("http://mixpanel.com");
final PackageManager manager = getContext().getPackageManager();
final ApplicationInfo appInfo = manager.getApplicationInfo(getContext().getPackageName(), 0);
mDefaultIcon = appInfo.icon;
mDefaultTitle = manager.getApplicationLabel(appInfo);
}
public void testNotificationEmptyIntent() {
final Intent intent = new Intent();
assertNull(mGcmReceiver.readInboundIntent(this.getContext(), intent, mResourceIds));
}
public void testCompleteNotification() {
final Intent intent = new Intent();
intent.putExtra("mp_message", "MESSAGE");
intent.putExtra("mp_icnm", "ic_pretend_icon");
intent.putExtra("mp_title", "TITLE");
intent.putExtra("mp_cta", mGoodUri.toString());
final GCMReceiver.NotificationData created = mGcmReceiver.readInboundIntent(getContext(), intent, mResourceIds);
assertEquals(created.icon, 12345);
assertEquals(created.title, "TITLE");
assertEquals(created.message, "MESSAGE");
assertEquals(Intent.ACTION_VIEW, created.intent.getAction());
assertEquals(mGoodUri, created.intent.getData());
}
public void testMinimalNotification(){
final Intent intent = new Intent();
intent.putExtra("mp_message", "MESSAGE");
final GCMReceiver.NotificationData created = mGcmReceiver.readInboundIntent(getContext(), intent, mResourceIds);
assertEquals(created.icon, mDefaultIcon);
assertEquals(created.title, mDefaultTitle);
assertEquals(created.message, "MESSAGE");
assertNull(created.intent.getData());
}
public void testBadIconNotification() {
final Intent intent = new Intent();
intent.putExtra("mp_message", "MESSAGE");
intent.putExtra("mp_icnm", "NO SUCH ICON");
final GCMReceiver.NotificationData created = mGcmReceiver.readInboundIntent(getContext(), intent, mResourceIds);
assertEquals(created.icon, mDefaultIcon);
}
public void testBadUri() {
final Intent intent = new Intent();
intent.putExtra("mp_message", "MESSAGE");
intent.putExtra("mp_cta", (String) null);
final GCMReceiver.NotificationData created = mGcmReceiver.readInboundIntent(getContext(), intent, mResourceIds);
assertNull(created.intent.getData());
}
private static class TestGCMReceiver extends GCMReceiver {
public TestGCMReceiver(Intent aDummy) {
dummyIntent = aDummy;
}
@Override
public Intent getDefaultIntent(Context context) {
return dummyIntent;
}
public final Intent dummyIntent;
}
private CharSequence mDefaultTitle;
private int mDefaultIcon;
private GCMReceiver mGcmReceiver;
private ResourceIds mResourceIds;
private Uri mGoodUri;
}