Add unit test for setting badges
This commit is contained in:
parent
8011935a3b
commit
17e8b77e88
|
@ -6,6 +6,7 @@
|
||||||
package org.whispersystems.textsecuregcm.tests.controllers;
|
package org.whispersystems.textsecuregcm.tests.controllers;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.mockito.ArgumentMatchers.refEq;
|
||||||
import static org.mockito.Mockito.any;
|
import static org.mockito.Mockito.any;
|
||||||
import static org.mockito.Mockito.clearInvocations;
|
import static org.mockito.Mockito.clearInvocations;
|
||||||
import static org.mockito.Mockito.eq;
|
import static org.mockito.Mockito.eq;
|
||||||
|
@ -24,6 +25,7 @@ import io.dropwizard.testing.junit5.ResourceExtension;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.time.Clock;
|
import java.time.Clock;
|
||||||
|
import java.time.Instant;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
@ -60,6 +62,7 @@ import org.whispersystems.textsecuregcm.limits.RateLimiters;
|
||||||
import org.whispersystems.textsecuregcm.s3.PolicySigner;
|
import org.whispersystems.textsecuregcm.s3.PolicySigner;
|
||||||
import org.whispersystems.textsecuregcm.s3.PostPolicyGenerator;
|
import org.whispersystems.textsecuregcm.s3.PostPolicyGenerator;
|
||||||
import org.whispersystems.textsecuregcm.storage.Account;
|
import org.whispersystems.textsecuregcm.storage.Account;
|
||||||
|
import org.whispersystems.textsecuregcm.storage.AccountBadge;
|
||||||
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager;
|
import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
||||||
|
@ -134,6 +137,8 @@ class ProfileControllerTest {
|
||||||
void setup() {
|
void setup() {
|
||||||
reset(s3client);
|
reset(s3client);
|
||||||
|
|
||||||
|
when(clock.instant()).thenReturn(Instant.ofEpochSecond(42));
|
||||||
|
|
||||||
AccountsHelper.setupMockUpdate(accountsManager);
|
AccountsHelper.setupMockUpdate(accountsManager);
|
||||||
|
|
||||||
dynamicPaymentsConfiguration = mock(DynamicPaymentsConfiguration.class);
|
dynamicPaymentsConfiguration = mock(DynamicPaymentsConfiguration.class);
|
||||||
|
@ -652,4 +657,99 @@ class ProfileControllerTest {
|
||||||
.get(Profile.class);
|
.get(Profile.class);
|
||||||
assertThat(profile.getPaymentAddress()).isNull();
|
assertThat(profile.getPaymentAddress()).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSetProfileBadges() throws InvalidInputException {
|
||||||
|
ProfileKeyCommitment commitment = new ProfileKey(new byte[32]).getCommitment(AuthHelper.VALID_UUID);
|
||||||
|
|
||||||
|
clearInvocations(AuthHelper.VALID_ACCOUNT_TWO);
|
||||||
|
|
||||||
|
final String name = RandomStringUtils.randomAlphabetic(380);
|
||||||
|
final String emoji = RandomStringUtils.randomAlphanumeric(80);
|
||||||
|
final String text = RandomStringUtils.randomAlphanumeric(720);
|
||||||
|
|
||||||
|
Response response = resources.getJerseyTest()
|
||||||
|
.target("/v1/profile/")
|
||||||
|
.request()
|
||||||
|
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID_TWO, AuthHelper.VALID_PASSWORD_TWO))
|
||||||
|
.put(Entity.entity(new CreateProfileRequest(commitment, "anotherversion", name, emoji, text, null, false, List.of("TEST2")), MediaType.APPLICATION_JSON_TYPE));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
assertThat(response.hasEntity()).isFalse();
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
ArgumentCaptor<List<AccountBadge>> badgeCaptor = ArgumentCaptor.forClass(List.class);
|
||||||
|
verify(AuthHelper.VALID_ACCOUNT_TWO).setBadges(refEq(clock), badgeCaptor.capture());
|
||||||
|
|
||||||
|
List<AccountBadge> badges = badgeCaptor.getValue();
|
||||||
|
assertThat(badges).isNotNull().hasSize(1).containsOnly(new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), true));
|
||||||
|
|
||||||
|
clearInvocations(AuthHelper.VALID_ACCOUNT_TWO);
|
||||||
|
when(AuthHelper.VALID_ACCOUNT_TWO.getBadges()).thenReturn(List.of(
|
||||||
|
new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), true)
|
||||||
|
));
|
||||||
|
|
||||||
|
response = resources.getJerseyTest()
|
||||||
|
.target("/v1/profile/")
|
||||||
|
.request()
|
||||||
|
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID_TWO, AuthHelper.VALID_PASSWORD_TWO))
|
||||||
|
.put(Entity.entity(new CreateProfileRequest(commitment, "anotherversion", name, emoji, text, null, false, List.of("TEST3", "TEST2")), MediaType.APPLICATION_JSON_TYPE));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
assertThat(response.hasEntity()).isFalse();
|
||||||
|
|
||||||
|
//noinspection unchecked
|
||||||
|
badgeCaptor = ArgumentCaptor.forClass(List.class);
|
||||||
|
verify(AuthHelper.VALID_ACCOUNT_TWO).setBadges(refEq(clock), badgeCaptor.capture());
|
||||||
|
|
||||||
|
badges = badgeCaptor.getValue();
|
||||||
|
assertThat(badges).isNotNull().hasSize(2).containsOnly(
|
||||||
|
new AccountBadge("TEST3", Instant.ofEpochSecond(42 + 86400), true),
|
||||||
|
new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), true));
|
||||||
|
|
||||||
|
clearInvocations(AuthHelper.VALID_ACCOUNT_TWO);
|
||||||
|
when(AuthHelper.VALID_ACCOUNT_TWO.getBadges()).thenReturn(List.of(
|
||||||
|
new AccountBadge("TEST3", Instant.ofEpochSecond(42 + 86400), true),
|
||||||
|
new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), true)
|
||||||
|
));
|
||||||
|
|
||||||
|
response = resources.getJerseyTest()
|
||||||
|
.target("/v1/profile/")
|
||||||
|
.request()
|
||||||
|
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID_TWO, AuthHelper.VALID_PASSWORD_TWO))
|
||||||
|
.put(Entity.entity(new CreateProfileRequest(commitment, "anotherversion", name, emoji, text, null, false, List.of("TEST2", "TEST3")), MediaType.APPLICATION_JSON_TYPE));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
assertThat(response.hasEntity()).isFalse();
|
||||||
|
|
||||||
|
//noinspection unchecked
|
||||||
|
badgeCaptor = ArgumentCaptor.forClass(List.class);
|
||||||
|
verify(AuthHelper.VALID_ACCOUNT_TWO).setBadges(refEq(clock), badgeCaptor.capture());
|
||||||
|
|
||||||
|
badges = badgeCaptor.getValue();
|
||||||
|
assertThat(badges).isNotNull().hasSize(2).containsOnly(
|
||||||
|
new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), true),
|
||||||
|
new AccountBadge("TEST3", Instant.ofEpochSecond(42 + 86400), true));
|
||||||
|
|
||||||
|
clearInvocations(AuthHelper.VALID_ACCOUNT_TWO);
|
||||||
|
when(AuthHelper.VALID_ACCOUNT_TWO.getBadges()).thenReturn(List.of(
|
||||||
|
new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), true),
|
||||||
|
new AccountBadge("TEST3", Instant.ofEpochSecond(42 + 86400), true)
|
||||||
|
));
|
||||||
|
|
||||||
|
response = resources.getJerseyTest()
|
||||||
|
.target("/v1/profile/")
|
||||||
|
.request()
|
||||||
|
.header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_UUID_TWO, AuthHelper.VALID_PASSWORD_TWO))
|
||||||
|
.put(Entity.entity(new CreateProfileRequest(commitment, "anotherversion", name, emoji, text, null, false, List.of("TEST1")), MediaType.APPLICATION_JSON_TYPE));
|
||||||
|
assertThat(response.getStatus()).isEqualTo(200);
|
||||||
|
assertThat(response.hasEntity()).isFalse();
|
||||||
|
|
||||||
|
//noinspection unchecked
|
||||||
|
badgeCaptor = ArgumentCaptor.forClass(List.class);
|
||||||
|
verify(AuthHelper.VALID_ACCOUNT_TWO).setBadges(refEq(clock), badgeCaptor.capture());
|
||||||
|
|
||||||
|
badges = badgeCaptor.getValue();
|
||||||
|
assertThat(badges).isNotNull().hasSize(3).containsOnly(
|
||||||
|
new AccountBadge("TEST1", Instant.ofEpochSecond(42 + 86400), true),
|
||||||
|
new AccountBadge("TEST2", Instant.ofEpochSecond(42 + 86400), false),
|
||||||
|
new AccountBadge("TEST3", Instant.ofEpochSecond(42 + 86400), false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,6 +162,10 @@ public class AccountsHelper {
|
||||||
when(updatedAccount.getIdentityKey()).thenAnswer(stubbing);
|
when(updatedAccount.getIdentityKey()).thenAnswer(stubbing);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "getBadges": {
|
||||||
|
when(updatedAccount.getBadges()).thenAnswer(stubbing);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"unsupported method: Account#" + stubbing.getInvocation().getMethod().getName());
|
"unsupported method: Account#" + stubbing.getInvocation().getMethod().getName());
|
||||||
|
|
|
@ -23,8 +23,8 @@ import java.util.UUID;
|
||||||
import org.whispersystems.textsecuregcm.auth.AccountAuthenticator;
|
import org.whispersystems.textsecuregcm.auth.AccountAuthenticator;
|
||||||
import org.whispersystems.textsecuregcm.auth.AuthenticatedAccount;
|
import org.whispersystems.textsecuregcm.auth.AuthenticatedAccount;
|
||||||
import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials;
|
import org.whispersystems.textsecuregcm.auth.AuthenticationCredentials;
|
||||||
import org.whispersystems.textsecuregcm.auth.DisabledPermittedAuthenticatedAccount;
|
|
||||||
import org.whispersystems.textsecuregcm.auth.DisabledPermittedAccountAuthenticator;
|
import org.whispersystems.textsecuregcm.auth.DisabledPermittedAccountAuthenticator;
|
||||||
|
import org.whispersystems.textsecuregcm.auth.DisabledPermittedAuthenticatedAccount;
|
||||||
import org.whispersystems.textsecuregcm.storage.Account;
|
import org.whispersystems.textsecuregcm.storage.Account;
|
||||||
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.Device;
|
import org.whispersystems.textsecuregcm.storage.Device;
|
||||||
|
|
Loading…
Reference in New Issue