Implement additional message request improvements.

This commit is contained in:
Greyson Parrelli
2020-02-21 13:52:27 -05:00
parent 81c7887d47
commit 1faf196f82
43 changed files with 1523 additions and 361 deletions

View File

@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.recipients;
import android.content.Context;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
@@ -11,6 +12,7 @@ import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
import org.thoughtcrime.securesms.database.RecipientDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import org.thoughtcrime.securesms.util.FeatureFlags;
import static org.junit.Assert.assertFalse;
@@ -53,7 +55,7 @@ public class RecipientUtilTest {
when(FeatureFlags.messageRequests()).thenReturn(false);
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1);
// THEN
assertTrue(result);
@@ -62,7 +64,7 @@ public class RecipientUtilTest {
@Test
public void givenThreadIsNegativeOne_whenIsThreadMessageRequestAccepted_thenIExpectTrue() {
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, -1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, -1L);
// THEN
assertTrue(result);
@@ -71,7 +73,7 @@ public class RecipientUtilTest {
@Test
public void givenRecipientIsNullForThreadId_whenIsThreadMessageRequestAccepted_thenIExpectTrue() {
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1L);
// THEN
assertTrue(result);
@@ -84,7 +86,7 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(5);
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1L);
// THEN
assertTrue(result);
@@ -98,7 +100,7 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(0);
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1L);
// THEN
assertTrue(result);
@@ -112,12 +114,13 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(1L)).thenReturn(0);
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1L);
// THEN
assertTrue(result);
}
@Ignore
@Test
public void givenIHaveReceivedASecureMessageIHaveNotSentASecureMessageAndRecipientIsNotSystemContactAndNotProfileSharing_whenIsThreadMessageRequestAccepted_thenIExpectFalse() {
// GIVEN
@@ -126,7 +129,7 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getSecureConversationCount(1L)).thenReturn(5);
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1L);
// THEN
assertFalse(result);
@@ -140,7 +143,7 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getSecureConversationCount(1L)).thenReturn(0);
// WHEN
boolean result = RecipientUtil.isThreadMessageRequestAccepted(context, 1L);
boolean result = RecipientUtil.isMessageRequestAccepted(context, 1L);
// THEN
assertTrue(result);
@@ -149,7 +152,7 @@ public class RecipientUtilTest {
@Test
public void givenRecipientIsNull_whenIsRecipientMessageRequestAccepted_thenIExpectTrue() {
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, null);
boolean result = RecipientUtil.isMessageRequestAccepted(context, null);
// THEN
assertTrue(result);
@@ -161,7 +164,7 @@ public class RecipientUtilTest {
when(FeatureFlags.messageRequests()).thenReturn(false);
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, recipient);
boolean result = RecipientUtil.isMessageRequestAccepted(context, recipient);
// THEN
assertTrue(result);
@@ -173,7 +176,7 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getOutgoingSecureConversationCount(anyLong())).thenReturn(1);
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, recipient);
boolean result = RecipientUtil.isMessageRequestAccepted(context, recipient);
// THEN
assertTrue(result);
@@ -185,7 +188,7 @@ public class RecipientUtilTest {
when(recipient.isProfileSharing()).thenReturn(true);
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, recipient);
boolean result = RecipientUtil.isMessageRequestAccepted(context, recipient);
// THEN
assertTrue(result);
@@ -197,19 +200,21 @@ public class RecipientUtilTest {
when(recipient.isSystemContact()).thenReturn(true);
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, recipient);
boolean result = RecipientUtil.isMessageRequestAccepted(context, recipient);
// THEN
assertTrue(result);
}
@Ignore
@Test
public void givenNoSecureMessagesSentSomeSecureMessagesReceivedNotSharingAndNotSystemContact_whenIsRecipientMessageRequestAccepted_thenIExpectFalse() {
// GIVEN
when(recipient.isRegistered()).thenReturn(true);
when(mockMmsSmsDatabase.getSecureConversationCount(anyLong())).thenReturn(5);
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, recipient);
boolean result = RecipientUtil.isMessageRequestAccepted(context, recipient);
// THEN
assertFalse(result);
@@ -221,12 +226,13 @@ public class RecipientUtilTest {
when(mockMmsSmsDatabase.getSecureConversationCount(anyLong())).thenReturn(0);
// WHEN
boolean result = RecipientUtil.isRecipientMessageRequestAccepted(context, recipient);
boolean result = RecipientUtil.isMessageRequestAccepted(context, recipient);
// THEN
assertTrue(result);
}
@Ignore
@Test
public void givenNoSecureMessagesSent_whenIShareProfileIfFirstSecureMessage_thenIShareProfile() {
// GIVEN
@@ -239,6 +245,7 @@ public class RecipientUtilTest {
verify(mockRecipientDatabase).setProfileSharing(recipient.getId(), true);
}
@Ignore
@Test
public void givenSecureMessagesSent_whenIShareProfileIfFirstSecureMessage_thenIShareProfile() {
// GIVEN

View File

@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.util;
import org.junit.Test;
import org.thoughtcrime.securesms.util.FeatureFlags.Change;
import org.thoughtcrime.securesms.util.FeatureFlags.UpdateResult;
import java.util.Arrays;
@@ -9,12 +10,14 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
public class FeatureFlagsTest {
private static final String A = key("a");
private static final String B = key("b");
private static final String A = "A";
private static final String B = "B";
@Test
public void updateInternal_newValue_ignoreNotInRemoteCapable() {
@@ -28,6 +31,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf("A", true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -41,6 +45,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -54,6 +59,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
}
@Test
@@ -67,6 +73,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -80,6 +87,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
}
@Test
@@ -93,6 +101,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, false), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -106,6 +115,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
}
@Test
@@ -119,6 +129,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertEquals(Change.ENABLED, result.getChanges().get(A));
}
@Test
@@ -132,6 +143,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -145,6 +157,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -158,6 +171,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertEquals(Change.REMOVED, result.getChanges().get(A));
}
@Test
@@ -171,6 +185,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -184,6 +199,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, false), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -197,6 +213,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true), result.getMemory());
assertEquals(mapOf(A, true), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -210,6 +227,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(), result.getDisk());
assertEquals(Change.REMOVED, result.getChanges().get(A));
}
@Test
@@ -224,6 +242,7 @@ public class FeatureFlagsTest {
assertEquals(mapOf(), result.getMemory());
assertEquals(mapOf(A, true, B, false), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
@Test
@@ -240,10 +259,34 @@ public class FeatureFlagsTest {
assertEquals(mapOf(A, true, B, true), result.getMemory());
assertEquals(mapOf(A, true, B, false), result.getDisk());
assertTrue(result.getChanges().isEmpty());
}
private static String key(String s) {
return "android." + s;
@Test
public void computeChanges_generic() {
Map<String, Boolean> oldMap = new HashMap<String, Boolean>() {{
put("a", true);
put("b", false);
put("c", true);
put("d", false);
}};
Map<String, Boolean> newMap = new HashMap<String, Boolean>() {{
put("a", true);
put("b", true);
put("c", false);
put("e", true);
put("f", false);
}};
Map<String, Change> changes = FeatureFlags.computeChanges(oldMap, newMap);
assertFalse(changes.containsKey("a"));
assertEquals(Change.ENABLED, changes.get("b"));
assertEquals(Change.DISABLED, changes.get("c"));
assertEquals(Change.REMOVED, changes.get("d"));
assertEquals(Change.ENABLED, changes.get("e"));
assertEquals(Change.DISABLED, changes.get("f"));
}
private static <V> Set<V> setOf(V... values) {