@UsesMocks({SocializeConfig.class, MockContext.class, Intent.class})
  public void test_registerC2DM() {
    final String senderId = "foobar";

    NotificationRegistrationState notificationRegistrationState =
        AndroidMock.createMock(NotificationRegistrationState.class);
    SocializeConfig config = AndroidMock.createMock(SocializeConfig.class);
    MockContext context = AndroidMock.createNiceMock(MockContext.class);
    final Intent registrationIntent = AndroidMock.createMock(Intent.class);

    AndroidMock.expect(notificationRegistrationState.isC2dmPending()).andReturn(false);

    notificationRegistrationState.setC2dmPendingRequestTime(AndroidMock.anyLong());
    notificationRegistrationState.save(context);

    AndroidMock.expect(config.getProperty(SocializeConfig.SOCIALIZE_C2DM_SENDER_ID))
        .andReturn(senderId);

    AndroidMock.expect(
            registrationIntent.putExtra(
                SocializeNotificationRegistrationSystem.EXTRA_APPLICATION_PENDING_INTENT,
                (PendingIntent) null))
        .andReturn(registrationIntent);
    AndroidMock.expect(
            registrationIntent.putExtra(
                SocializeNotificationRegistrationSystem.EXTRA_SENDER, senderId))
        .andReturn(registrationIntent);
    AndroidMock.expect(context.startService(registrationIntent)).andReturn(null);

    AndroidMock.replay(notificationRegistrationState, config, context, registrationIntent);

    SocializeNotificationRegistrationSystem system =
        new SocializeNotificationRegistrationSystem() {
          @Override
          public boolean isRegisteredC2DM() {
            return false;
          }

          @Override
          protected Intent newIntent(String action) {
            return registrationIntent;
          }

          @Override
          protected PendingIntent newPendingIntent(Context context) {
            return null;
          }
        };

    system.setConfig(config);
    system.setNotificationRegistrationState(notificationRegistrationState);

    system.registerC2DM(context);

    AndroidMock.verify(notificationRegistrationState, config, context, registrationIntent);
  }
  public void test_isRegistrationPending() {
    NotificationRegistrationState notificationRegistrationState =
        AndroidMock.createMock(NotificationRegistrationState.class);

    AndroidMock.expect(notificationRegistrationState.isC2dmPending()).andReturn(true);
    AndroidMock.replay(notificationRegistrationState);

    SocializeNotificationRegistrationSystem system = new SocializeNotificationRegistrationSystem();

    system.setNotificationRegistrationState(notificationRegistrationState);

    assertTrue(system.isRegistrationPending());

    AndroidMock.verify(notificationRegistrationState);
  }
  public void test_registerC2DMAsync() throws Exception {

    final CountDownLatch latch = new CountDownLatch(1);

    SocializeNotificationRegistrationSystem system =
        new SocializeNotificationRegistrationSystem() {
          @Override
          public synchronized void registerC2DM(Context context) {
            latch.countDown();
          }
        };

    system.registerC2DMAsync(getContext());

    assertTrue(latch.await(10, TimeUnit.SECONDS));
  }
  public void test_isRegisteredSocialize() {
    NotificationRegistrationState notificationRegistrationState =
        AndroidMock.createMock(NotificationRegistrationState.class);

    final User user = new User();
    AndroidMock.expect(notificationRegistrationState.isRegisteredSocialize(user)).andReturn(true);
    AndroidMock.replay(notificationRegistrationState);

    SocializeNotificationRegistrationSystem system = new SocializeNotificationRegistrationSystem();

    system.setNotificationRegistrationState(notificationRegistrationState);

    assertTrue(system.isRegisteredSocialize(user));

    AndroidMock.verify(notificationRegistrationState);
  }
  public void test_registerC2DMFailed() {

    NotificationRegistrationState notificationRegistrationState =
        AndroidMock.createMock(NotificationRegistrationState.class);

    notificationRegistrationState.setC2dmPendingRequestTime(0);
    notificationRegistrationState.save(getContext());

    AndroidMock.replay(notificationRegistrationState);

    SocializeNotificationRegistrationSystem system = new SocializeNotificationRegistrationSystem();

    system.setNotificationRegistrationState(notificationRegistrationState);

    system.registerC2DMFailed(getContext(), null);

    AndroidMock.verify(notificationRegistrationState);
  }
  public void test_registerSocialize() {
    NotificationRegistrationState notificationRegistrationState =
        AndroidMock.createMock(NotificationRegistrationState.class);
    notificationRegistrationState.setPendingSocializeRequestTime(AndroidMock.anyLong());
    notificationRegistrationState.save(getContext());

    final SocializeSession session = AndroidMock.createMock(SocializeSession.class);
    final String registrationId = "foobar";

    SocializeUserSystem userSystem =
        new SocializeUserSystem(null) {
          @Override
          public void authenticate(
              Context context,
              SocializeAuthListener listener,
              SocializeSessionConsumer sessionConsumer) {
            listener.onAuthSuccess(session);
          }
        };

    SocializeNotificationRegistrationSystem system =
        new SocializeNotificationRegistrationSystem() {
          @Override
          protected void doRegistrationSocialize(
              Context context, SocializeSession session, String registrationId) {
            addResult(0, session);
          }
        };

    system.setUserSystem(userSystem);
    system.setNotificationRegistrationState(notificationRegistrationState);

    AndroidMock.replay(notificationRegistrationState, session);

    system.registerSocialize(getContext(), registrationId);

    AndroidMock.verify(notificationRegistrationState, session);

    SocializeSession result = getResult(0);

    assertSame(session, result);
  }
 @Override
 public void doRegistrationSocialize(
     Context context, SocializeSession session, String registrationId) {
   super.doRegistrationSocialize(context, session, registrationId);
 }