Home | History | Annotate | Download | only in survey
      1 package com.android.settings.survey;
      2 
      3 import static com.google.common.truth.Truth.assertThat;
      4 import static org.mockito.Matchers.any;
      5 import static org.mockito.Matchers.eq;
      6 import static org.mockito.Mockito.never;
      7 import static org.mockito.Mockito.times;
      8 import static org.mockito.Mockito.verify;
      9 import static org.mockito.Mockito.when;
     10 
     11 import android.app.Activity;
     12 import android.content.BroadcastReceiver;
     13 import android.content.Context;
     14 import android.content.IntentFilter;
     15 import android.support.v4.content.LocalBroadcastManager;
     16 
     17 import com.android.settings.core.InstrumentedPreferenceFragment;
     18 import com.android.settings.overlay.SurveyFeatureProvider;
     19 import com.android.settings.testutils.FakeFeatureFactory;
     20 import com.android.settings.testutils.SettingsRobolectricTestRunner;
     21 
     22 import org.junit.Before;
     23 import org.junit.Test;
     24 import org.junit.runner.RunWith;
     25 import org.mockito.Mock;
     26 import org.mockito.MockitoAnnotations;
     27 import org.robolectric.Robolectric;
     28 import org.robolectric.RuntimeEnvironment;
     29 import org.robolectric.util.ReflectionHelpers;
     30 
     31 import java.util.ArrayList;
     32 import java.util.HashMap;
     33 
     34 @RunWith(SettingsRobolectricTestRunner.class)
     35 public class SurveyMixinTest {
     36 
     37     private static final String FAKE_KEY = "fake_key";
     38     private static final String FAKE_SURVEY_ID = "fake_id";
     39 
     40     private Context mContext;
     41     private SurveyFeatureProvider mProvider;
     42     @Mock
     43     private BroadcastReceiver mReceiver;
     44     @Mock
     45     private InstrumentedPreferenceFragment mFragment;
     46 
     47     @Before
     48     public void setUp() {
     49         // set up the fakefeature factory to mock out the survey provider
     50         MockitoAnnotations.initMocks(this);
     51         mContext = RuntimeEnvironment.application;
     52         mProvider = FakeFeatureFactory.setupForTest().getSurveyFeatureProvider(mContext);
     53         when(mProvider.getSurveyId(any(), eq(FAKE_KEY))).thenReturn(FAKE_SURVEY_ID);
     54     }
     55 
     56     @Test
     57     public void onResume_triesRegisteringReceiverAndDownloadingWhenNoSurveyDetected() {
     58         // Pretend there is no survey in memory
     59         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
     60 
     61         // Pretend we are an activity that is starting up
     62         Activity temp = Robolectric.setupActivity(Activity.class);
     63         when(mFragment.getActivity()).thenReturn(temp);
     64         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
     65         mixin.onResume();
     66 
     67         // Verify that a download was attempted
     68         verify(mProvider, times(1)).downloadSurvey(any(), any(), any());
     69         // Verify that we registered a receiver for download completion broadcasts
     70         verify(mProvider, times(1)).createAndRegisterReceiver(any());
     71         // Verify we did not try to show a survey
     72         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
     73     }
     74 
     75     @Test
     76     public void onResume_triesShowingSurveyWhenOneIsPresent() {
     77         // Pretend there is a survey in memory
     78         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(0L);
     79 
     80         // Pretend we are an activity that is starting up
     81         Activity temp = Robolectric.setupActivity(Activity.class);
     82         when(mFragment.getActivity()).thenReturn(temp);
     83         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
     84         mixin.onResume();
     85 
     86         // Verify that a download was not attempted
     87         verify(mProvider, never()).downloadSurvey(any(), any(), any());
     88         // Verify that we did not register a receiver
     89         verify(mProvider, never()).createAndRegisterReceiver(any());
     90         // Verify we tried to show a survey
     91         verify(mProvider, times(1)).showSurveyIfAvailable(any(), any());
     92     }
     93 
     94     @Test
     95     public void onResume_doesNothingWhenActivityIsNull() {
     96         // Pretend the activity died somewhere in the process
     97         when(mFragment.getActivity()).thenReturn(null);
     98         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
     99         mixin.onResume();
    100 
    101         // Verify we don't try showing or downloading a survey
    102         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
    103         verify(mProvider, never()).downloadSurvey(any(), any(), any());
    104     }
    105 
    106     @Test
    107     public void onPause_removesReceiverIfPreviouslySet() {
    108         // Pretend there is a survey in memory
    109         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
    110 
    111         // Pretend we are an activity that starts and stops
    112         Activity temp = Robolectric.setupActivity(Activity.class);
    113         when(mFragment.getActivity()).thenReturn(temp);
    114         when(mProvider.createAndRegisterReceiver(any())).thenReturn(mReceiver);
    115         LocalBroadcastManager manager = LocalBroadcastManager.getInstance(temp);
    116         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
    117         mixin.onResume();
    118         manager.registerReceiver(mReceiver, new IntentFilter());
    119         mixin.onPause();
    120 
    121         // Verify we remove the receiver
    122         HashMap<BroadcastReceiver, ArrayList<IntentFilter>> map =
    123                 ReflectionHelpers.getField(manager, "mReceivers");
    124         assertThat(map.containsKey(mReceiver)).isFalse();
    125     }
    126 
    127     @Test
    128     public void onPause_doesNothingWhenActivityOrReceiverNull() {
    129         // Pretend there is a survey in memory
    130         when(mProvider.getSurveyExpirationDate(any(), any())).thenReturn(-1L);
    131 
    132         // Pretend we are an activity that fails to create a receiver properly
    133         Activity temp = Robolectric.setupActivity(Activity.class);
    134         when(mFragment.getActivity()).thenReturn(temp);
    135         SurveyMixin mixin = new SurveyMixin(mFragment, FAKE_KEY);
    136         mixin.onPause();
    137 
    138         // Verify we do nothing;
    139         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
    140 
    141         // pretend the activity died before onPause
    142         when(mFragment.getActivity()).thenReturn(null);
    143         mixin.onPause();
    144 
    145         // Verify we do nothing
    146         verify(mProvider, never()).showSurveyIfAvailable(any(), any());
    147     }
    148 }
    149