package com.b2msolutions.reyna.system;
import android.content.Context;
import android.content.SharedPreferences;
import com.b2msolutions.reyna.blackout.Time;
import com.b2msolutions.reyna.blackout.TimeRange;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.net.URI;
import static junit.framework.Assert.*;
@RunWith(RobolectricTestRunner.class)
public class PreferencesTest {
@Test
public void canStoreCellularDataBlackout() {
TimeRange range = new TimeRange(new Time(1, 12), new Time(19, 19));
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveCellularDataBlackout(range);
TimeRange other = preferences.getCellularDataBlackout();
assertEquals(other.getFrom().getMinuteOfDay(), range.getFrom().getMinuteOfDay());
assertEquals(other.getTo().getMinuteOfDay(), range.getTo().getMinuteOfDay());
}
@Test
public void whenTimeRangeIsNullShouldNotThrow() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveCellularDataBlackout(null);
}
@Test
public void whenNoBlackoutStoredShouldReturnNull() {
SharedPreferences sp = RuntimeEnvironment.application.getSharedPreferences(Preferences.class.getName(), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.commit();
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertNull(preferences.getCellularDataBlackout());
}
@Test
public void resetCellularDataBlackoutShouldRemoveKeys() {
TimeRange range = new TimeRange(new Time(1, 12), new Time(19, 19));
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveCellularDataBlackout(range);
TimeRange timeRange = preferences.getCellularDataBlackout();
assertNotNull(timeRange);
preferences.resetCellularDataBlackout();
timeRange = preferences.getCellularDataBlackout();
assertNull(timeRange);
}
@Test
public void canStoreStorageSize() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveStorageSize(100);
long storageSize = preferences.getStorageSize();
assertEquals(100, storageSize);
}
@Test
public void shouldReturnDefaultWhenNoStorageSize() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
long storageSize = preferences.getStorageSize();
assertEquals(-1, storageSize);
}
@Test
public void shouldResetStorageSizeByRemovingTheKeyFromPreferences() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveStorageSize(42);
preferences.resetStorageSize();
assertEquals(-1, preferences.getStorageSize());
}
@Test
public void getWlanRangeShouldReturnExpectedOnceWlanRangeIsSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWlanBlackout("01:00-09:00");
assertEquals("01:00-09:00", preferences.getWlanBlackout());
}
@Test
public void getWlanRangeReturnsEmptyStringIfWlanRangeIsNotSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals("", preferences.getWlanBlackout());
}
@Test
public void getWlanRangeReturnsEmptyStringIfNewWlanRangeIsNotValid() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWwanBlackout("01:00-09:00");//existing preference to overwrite
preferences.saveWlanBlackout("");
assertEquals("", preferences.getWlanBlackout());
}
@Test
public void getWwanRangeReturnsEmptyStringIfNewWwanRangeIsNotValid() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWwanBlackout("01:00-09:00");//existing preference to overwrite
preferences.saveWwanBlackout("");
assertEquals("", preferences.getWwanBlackout());
}
@Test
public void getWwanRangeShouldReturnExpectedOnceWwanRangeIsSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWwanBlackout("01:00-09:00");
assertEquals("01:00-09:00", preferences.getWwanBlackout());
}
@Test
public void whenSavingWlanRangeShouldValidateInput() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWlanBlackout("01:00");
assertEquals("", preferences.getWlanBlackout());
}
@Test
public void whenSavingWwanRangeShouldValidateInput() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWwanBlackout("01:00");
assertEquals("", preferences.getWwanBlackout());
}
@Test
public void getWwanRangeReturnsEmptyStringIfWwanRangeIsNotSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals("", preferences.getWwanBlackout());
}
@Test
public void canSendOnRoamingShouldReturnExpected() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveWwanRoamingBlackout(true);
assertFalse(preferences.canSendOnRoaming());
}
@Test
public void canSendOnRoamingReturnsFalseIfWwanRoamingIsNotSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertFalse(preferences.canSendOnRoaming());
}
@Test
public void canSendOnChargeShouldReturnExpected() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveOnChargeBlackout(true);
assertFalse(preferences.canSendOnCharge());
}
@Test
public void canSendOnChargeReturnsTrueIfOnChargeIsNotSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertTrue(preferences.canSendOnCharge());
}
@Test
public void canSendOffChargeShouldReturnExpected() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveOffChargeBlackout(true);
assertFalse(preferences.canSendOffCharge());
}
@Test
public void canSendOffChargeReturnsTrueIfOffChargeIsNotSaved() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertTrue(preferences.canSendOffCharge());
}
@Test
public void isBlackoutRangeValidShouldReturnBoolean() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertTrue(preferences.isBlackoutRangeValid("00:00-02:30"));
assertTrue(preferences.isBlackoutRangeValid("00:00-02:30,01:30-06:00"));
assertTrue(preferences.isBlackoutRangeValid("00:00-02:30,03:30-06:00,07:00-07:01"));
assertFalse(preferences.isBlackoutRangeValid(""));
assertFalse(preferences.isBlackoutRangeValid("00:00"));
assertFalse(preferences.isBlackoutRangeValid("1:00"));
assertFalse(preferences.isBlackoutRangeValid("1:0002:00"));
assertFalse(preferences.isBlackoutRangeValid("1"));
assertFalse(preferences.isBlackoutRangeValid("00:10-"));
assertFalse(preferences.isBlackoutRangeValid("00:10-1"));
assertFalse(preferences.isBlackoutRangeValid("00:00-02:30-15:42"));
}
@Test
public void whenNoBatchUploadStoredShouldReturnTrue() {
this.clear();
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertFalse(preferences.getBatchUpload());
}
@Test
public void whenSavingBatchUploadStoredShouldReturnTrue() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveBatchUpload(true);
assertTrue(preferences.getBatchUpload());
preferences.saveBatchUpload(false);
assertFalse(preferences.getBatchUpload());
}
@Test
public void whenSavingBatchUploadUrlShouldGetItCorrectly() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveBatchUploadUrl(URI.create("www.URL.com"));
assertEquals(URI.create("www.URL.com"), preferences.getBatchUploadUrl());
}
@Test
public void whenGetBatchUploadCheckIntervalAndNotPreviouslySavedShouldReturnSixHours() {
this.clear();
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals(6 * 60 * 60 * 1000, preferences.getBatchUploadCheckInterval());
}
@Test
public void whenSavingBatchUploadCheckIntervalShouldGetItCorrectly() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveBatchUploadCheckInterval(100);
assertEquals(100, preferences.getBatchUploadCheckInterval());
}
@Test
public void whenGetBatchUploadUrlAndNotPreviouslySavedReturnNull() {
this.clear();
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertNull(preferences.getBatchUploadUrl());
}
@Test
public void whenCallingGetNonRecurringWwanBlackoutStartTimeAndNoValueSavedShouldReturnSpecifiedDefaul() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals(-1, preferences.getNonRecurringWwanBlackoutStartTime(-1));
}
@Test
public void whenCallingGetNonRecurringWwanBlackoutEndTimeAndNoValueSavedShouldReturnSpecifiedDefault() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals(-1, preferences.getNonRecurringWwanBlackoutEndTime(-1));
}
@Test
public void whenCallingSaveNonRecurringWwanBlackoutStartTimeShouldRecordStartTimeOfBlackout() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveNonRecurringWwanBlackoutStartTime(42L);
assertEquals(42L, preferences.getNonRecurringWwanBlackoutStartTime(-1));
}
@Test
public void whenCallingSaveNonRecurringWwanBlackoutEndTimeShouldRecordEndTimeOfBlackout() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveNonRecurringWwanBlackoutEndTime(42L);
assertEquals(42L, preferences.getNonRecurringWwanBlackoutEndTime(-1));
}
@Test
public void whenCallingResetNonRecurringWwanBlackoutShouldRemoveStartAndEndValuesFromPrefs() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.resetNonRecurringWwanBlackout();
assertEquals(-1L, preferences.getNonRecurringWwanBlackoutStartTime(-1));
assertEquals(-1L, preferences.getNonRecurringWwanBlackoutEndTime(-1));
}
@Test
public void whenCallingSaveNonRecurringWwanBlackoutStartTimeShouldRecordStartTimeOfBlackoutAsString() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveNonRecurringWwanBlackoutStartTime(42L);
assertEquals("42", preferences.getNonRecurringWwanBlackoutStartTimeAsString());
}
@Test
public void whenCallingSaveNonRecurringWwanBlackoutEndTimeShouldRecordEndTimeOfBlackoutAsString() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.saveNonRecurringWwanBlackoutEndTime(42L);
assertEquals("42", preferences.getNonRecurringWwanBlackoutEndTimeAsString());
}
@Test
public void whenCallingGetNonRecurringWwanBlackoutStartTimeAsStringShouldDefaultToNull() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals(null, preferences.getNonRecurringWwanBlackoutStartTimeAsString());
}
@Test
public void whenCallingGetNonRecurringWwanBlackoutEndTimeAsStringShouldDefaultToNull() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
assertEquals(null, preferences.getNonRecurringWwanBlackoutEndTimeAsString());
}
@Test
public void whenCallingResetNonRecurringWwanBlackoutShouldRemoveStartAndEndValuesFromPrefsAndGetValuesAsStringShouldReturnNull() {
Preferences preferences = new Preferences(RuntimeEnvironment.application.getApplicationContext());
preferences.resetNonRecurringWwanBlackout();
assertEquals(null, preferences.getNonRecurringWwanBlackoutStartTimeAsString());
assertEquals(null, preferences.getNonRecurringWwanBlackoutEndTimeAsString());
}
private void clear() {
SharedPreferences sp = RuntimeEnvironment.application.getSharedPreferences(Preferences.class.getName(), Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.clear();
editor.commit();
}
}