package com.zegoggles.smssync.receiver;
import android.content.Context;
import android.content.Intent;
import com.zegoggles.smssync.preferences.AuthPreferences;
import com.zegoggles.smssync.preferences.Preferences;
import com.zegoggles.smssync.service.Alarms;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
@RunWith(RobolectricTestRunner.class)
public class SmsBroadcastReceiverTest {
Context context;
@Mock Alarms alarms;
@Mock Preferences preferences;
@Mock AuthPreferences authPreferences;
SmsBroadcastReceiver receiver;
@Before public void before() {
initMocks(this);
context = Robolectric.application;
receiver = new SmsBroadcastReceiver() {
@Override protected Alarms getAlarms(Context context) {
return alarms;
}
@Override protected Preferences getPreferences(Context context) {
return preferences;
}
@Override protected AuthPreferences getAuthPreferences(Context context) {
return authPreferences;
}
};
}
@Test public void shouldScheduleBootupBackupAfterBootup() throws Exception {
mockScheduled();
receiver.onReceive(context, new Intent().setAction(Intent.ACTION_BOOT_COMPLETED));
verify(alarms, times(1)).scheduleBootupBackup();
}
@Test public void shouldScheduleIncomingBackupAfterIncomingMessage() throws Exception {
mockScheduled();
receiver.onReceive(context, new Intent().setAction("android.provider.Telephony.SMS_RECEIVED"));
verify(alarms, times(1)).scheduleIncomingBackup();
}
@Test public void shouldNotScheduleIfAutoSyncIsDisabled() throws Exception {
mockScheduled();
when(preferences.isEnableAutoSync()).thenReturn(false);
receiver.onReceive(context, new Intent().setAction("android.provider.Telephony.SMS_RECEIVED"));
verifyZeroInteractions(alarms);
}
@Test public void shouldNotScheduleIfLoginInformationIsNotSet() throws Exception {
mockScheduled();
when(authPreferences.isLoginInformationSet()).thenReturn(false);
receiver.onReceive(context, new Intent().setAction("android.provider.Telephony.SMS_RECEIVED"));
verifyZeroInteractions(alarms);
}
@Test public void shouldNotScheduleIfFirstBackupHasNotBeenRun() throws Exception {
mockScheduled();
when(preferences.isFirstBackup()).thenReturn(true);
receiver.onReceive(context, new Intent().setAction("android.provider.Telephony.SMS_RECEIVED"));
verifyZeroInteractions(alarms);
}
private void mockScheduled() {
when(authPreferences.isLoginInformationSet()).thenReturn(true);
when(preferences.isEnableAutoSync()).thenReturn(true);
when(preferences.isFirstBackup()).thenReturn(false);
}
}