package org.iilab.pb.model; import android.content.Context; import org.iilab.pb.model.SMSSettings; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) public class SMSSettingsTest { @Test public void shouldSaveAndRetrieveSMSSettings() throws Exception { Context context = Robolectric.application; List<String> expectedPhoneNumbers = new ArrayList<String>(); expectedPhoneNumbers.add("123456789"); expectedPhoneNumbers.add("987654321"); String expectedMessage = "Test Message"; SMSSettings smsSettings = new SMSSettings(expectedPhoneNumbers, expectedMessage); SMSSettings.saveContacts(context, smsSettings); SMSSettings.saveMessage(context, expectedMessage); SMSSettings retrievedSMSSettings = SMSSettings.retrieve(context); assertEquals(expectedMessage, retrievedSMSSettings.message()); assertEquals(expectedPhoneNumbers.get(0), retrievedSMSSettings.phoneNumberAt(0)); assertEquals(expectedPhoneNumbers.get(1), retrievedSMSSettings.phoneNumberAt(1)); } @Test public void shouldReturnEmptyPhoneNumberForNonExistentIndex() { SMSSettings smsSettings = new SMSSettings(new ArrayList<String>(), "msg"); assertEquals("", smsSettings.phoneNumberAt(1)); } @Test public void shouldMaskPhoneNumberExceptTheLastTwoChars() { List<String> phoneNumbers = Arrays.asList("111-222-2289", "123456789", "*******89", "1", "22", "", null); SMSSettings smsSettings = new SMSSettings(phoneNumbers, "some message"); assertEquals("**********89", smsSettings.maskedPhoneNumberAt(0)); assertEquals("*******89", smsSettings.maskedPhoneNumberAt(1)); assertEquals("*******89", smsSettings.maskedPhoneNumberAt(2)); assertEquals("1", smsSettings.maskedPhoneNumberAt(3)); assertEquals("22", smsSettings.maskedPhoneNumberAt(4)); assertEquals("", smsSettings.maskedPhoneNumberAt(5)); assertNull(smsSettings.maskedPhoneNumberAt(6)); } @Test public void shouldReturnTrueWhenAnyOfThePhoneNumbersIsPresent() { List<String> phoneNumbers = new ArrayList<String>(); phoneNumbers.add("123-123-1222"); phoneNumbers.add(""); SMSSettings smsSettings = new SMSSettings(phoneNumbers, "some-message"); assertTrue(smsSettings.isConfigured()); } @Test public void shouldReturnTrueWhenAnyOfThePhoneNumbersIsPresentEvenWhenMessageIsNull() { List<String> phoneNumbers = new ArrayList<String>(); phoneNumbers.add(""); phoneNumbers.add("123-123-1222"); SMSSettings smsSettings = new SMSSettings(phoneNumbers, null); assertTrue(smsSettings.isConfigured()); } @Test public void shouldReturnFalseWhenPhoneNumbersAreEmpty() { List<String> phoneNumbers = new ArrayList<String>(); phoneNumbers.add(""); SMSSettings smsSettings = new SMSSettings(phoneNumbers, "some-message"); assertFalse(smsSettings.isConfigured()); } @Test public void shouldReturnFalseWhenPhoneNumbersAreNotPresent() { SMSSettings smsSettings = new SMSSettings(new ArrayList<String>(), "some-message"); assertFalse(smsSettings.isConfigured()); } @Test public void shouldReturnFalseWhenPhoneNumbersAreNull() { SMSSettings smsSettings = new SMSSettings(null, "some-message"); assertFalse(smsSettings.isConfigured()); } @Test public void shouldReturnValidPhoneNumbers() { List<String> phoneNumbers = Arrays.asList("1233244235", "", "154-345-345", null); SMSSettings smsSettings = new SMSSettings(phoneNumbers, "some-message"); List<String> validPhoneNumbers = smsSettings.validPhoneNumbers(); assertEquals(2, validPhoneNumbers.size()); assertEquals("1233244235", validPhoneNumbers.get(0)); assertEquals("154-345-345", validPhoneNumbers.get(1)); } @Test public void shouldReturnMessageWithoutTrailingDot() { String messageWithDot = "some message."; String messageWithoutDot = "some message"; String messageWithSpaceAtEnd = "some message "; SMSSettings smsSettings = new SMSSettings(new ArrayList<String>(), messageWithDot); assertEquals("some message", smsSettings.trimmedMessage()); smsSettings = new SMSSettings(new ArrayList<String>(), messageWithoutDot); assertEquals("some message", smsSettings.trimmedMessage()); smsSettings = new SMSSettings(new ArrayList<String>(), messageWithSpaceAtEnd); assertEquals("some message", smsSettings.trimmedMessage()); } @Test public void shouldReturnEmptyStringWhenMessageIsNull() { SMSSettings smsSettings = new SMSSettings(new ArrayList<String>(), null); assertEquals("", smsSettings.message()); } @Test public void shouldCheckEquality() { SMSSettings settings1 = new SMSSettings(Arrays.asList("12345"), "some message"); SMSSettings settings2 = new SMSSettings(Arrays.asList("1234" + "5"), "some message"); SMSSettings settings3 = new SMSSettings(Arrays.asList("1234" + "5"), "some other message"); assertTrue(settings1.equals(settings2)); assertFalse(settings1.equals(null)); assertFalse(settings1.equals(settings3)); } }