package com.nutomic.syncthingandroid.test.syncthing;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.preference.PreferenceManager;
import android.support.test.InstrumentationRegistry;
import android.support.test.rule.ServiceTestRule;
import com.nutomic.syncthingandroid.service.DeviceStateHolder;
import com.nutomic.syncthingandroid.receiver.NetworkReceiver;
import com.nutomic.syncthingandroid.service.SyncthingService;
import com.nutomic.syncthingandroid.test.MockContext;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
/**
* Tests for correct extras on the Intent sent by
* {@link NetworkReceiver}.
*
* Does not test for correct result value, as that would require mocking
* {@link android.net.ConnectivityManager} (or replacing it with an interface).
*/
public class NetworkReceiverTest {
@Rule
public final ServiceTestRule mServiceRule = new ServiceTestRule();
private NetworkReceiver mReceiver;
private MockContext mContext;
@Before
public void setUp() throws Exception {
mReceiver = new NetworkReceiver();
mContext = new MockContext(InstrumentationRegistry.getTargetContext());
}
@After
public void tearDown() throws Exception {
PreferenceManager.getDefaultSharedPreferences(mContext).edit().clear().apply();
}
@Test
public void testOnReceive() {
PreferenceManager.getDefaultSharedPreferences(mContext)
.edit()
.putBoolean(SyncthingService.PREF_ALWAYS_RUN_IN_BACKGROUND, true)
.apply();
mReceiver.onReceive(mContext, new Intent(ConnectivityManager.CONNECTIVITY_ACTION));
Assert.assertEquals(1, mContext.getReceivedIntents().size());
Intent receivedIntent = mContext.getReceivedIntents().get(0);
Assert.assertEquals(SyncthingService.class.getName(), receivedIntent.getComponent().getClassName());
Assert.assertNull(receivedIntent.getAction());
Assert.assertTrue(receivedIntent.hasExtra(DeviceStateHolder.EXTRA_HAS_WIFI));
mContext.clearReceivedIntents();
}
@Test
public void testOnlyRunInForeground() {
PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getTargetContext())
.edit()
.putBoolean(SyncthingService.PREF_ALWAYS_RUN_IN_BACKGROUND, false)
.apply();
mReceiver.onReceive(mContext, new Intent(Intent.ACTION_POWER_CONNECTED));
Assert.assertEquals(0, mContext.getReceivedIntents().size());
}
}