Calculate onetime badge expiration from payment success timestamp

This commit is contained in:
Katherine
2023-12-14 15:39:46 -05:00
committed by GitHub
parent 1167d0ac2e
commit 3548c3df15
8 changed files with 138 additions and 5 deletions

View File

@@ -68,6 +68,7 @@ import org.whispersystems.textsecuregcm.entities.BadgeSvg;
import org.whispersystems.textsecuregcm.mappers.CompletionExceptionMapper;
import org.whispersystems.textsecuregcm.mappers.SubscriptionProcessorExceptionMapper;
import org.whispersystems.textsecuregcm.storage.IssuedReceiptsManager;
import org.whispersystems.textsecuregcm.storage.OneTimeDonationsManager;
import org.whispersystems.textsecuregcm.storage.SubscriptionManager;
import org.whispersystems.textsecuregcm.subscriptions.BankMandateTranslator;
import org.whispersystems.textsecuregcm.subscriptions.BraintreeManager;
@@ -98,12 +99,13 @@ class SubscriptionControllerTest {
private static final PaymentIntent PAYMENT_INTENT = mock(PaymentIntent.class);
private static final ServerZkReceiptOperations ZK_OPS = mock(ServerZkReceiptOperations.class);
private static final IssuedReceiptsManager ISSUED_RECEIPTS_MANAGER = mock(IssuedReceiptsManager.class);
private static final OneTimeDonationsManager ONE_TIME_DONATIONS_MANAGER = mock(OneTimeDonationsManager.class);
private static final BadgeTranslator BADGE_TRANSLATOR = mock(BadgeTranslator.class);
private static final LevelTranslator LEVEL_TRANSLATOR = mock(LevelTranslator.class);
private static final BankMandateTranslator BANK_MANDATE_TRANSLATOR = mock(BankMandateTranslator.class);
private static final SubscriptionController SUBSCRIPTION_CONTROLLER = new SubscriptionController(
CLOCK, SUBSCRIPTION_CONFIG, ONETIME_CONFIG, SUBSCRIPTION_MANAGER, STRIPE_MANAGER, BRAINTREE_MANAGER, ZK_OPS,
ISSUED_RECEIPTS_MANAGER, BADGE_TRANSLATOR, LEVEL_TRANSLATOR, BANK_MANDATE_TRANSLATOR);
ISSUED_RECEIPTS_MANAGER, ONE_TIME_DONATIONS_MANAGER, BADGE_TRANSLATOR, LEVEL_TRANSLATOR, BANK_MANDATE_TRANSLATOR);
private static final ResourceExtension RESOURCE_EXTENSION = ResourceExtension.builder()
.addProperty(ServerProperties.UNWRAP_COMPLETION_STAGE_IN_WRITER_ENABLE, Boolean.TRUE)
.addProvider(AuthHelper.getAuthFilter())

View File

@@ -242,6 +242,15 @@ public final class DynamoDbExtensionSchema {
.projection(Projection.builder().projectionType(ProjectionType.KEYS_ONLY).build())
.build())),
ONETIME_DONATIONS("onetime_donations_test",
OneTimeDonationsManager.KEY_PAYMENT_INTENT_ID,
null,
List.of(AttributeDefinition.builder()
.attributeName(OneTimeDonationsManager.KEY_PAYMENT_INTENT_ID)
.attributeType(ScalarAttributeType.S)
.build()),
List.of(), List.of()),
PROFILES("profiles_test",
Profiles.KEY_ACCOUNT_UUID,
Profiles.ATTR_VERSION,

View File

@@ -0,0 +1,37 @@
/*
* Copyright 2023 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.whispersystems.textsecuregcm.storage;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.Instant;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
public class OnetimeDonationsManagerTest {
@RegisterExtension
static final DynamoDbExtension DYNAMO_DB_EXTENSION = new DynamoDbExtension(DynamoDbExtensionSchema.Tables.ONETIME_DONATIONS);
private OneTimeDonationsManager oneTimeDonationsManager;
@BeforeEach
void beforeEach() {
oneTimeDonationsManager = new OneTimeDonationsManager(
DynamoDbExtensionSchema.Tables.ONETIME_DONATIONS.tableName(),
DYNAMO_DB_EXTENSION.getDynamoDbAsyncClient());
}
@Test
void testGetPaidAtTimestamp() {
final String validPaymentIntentId = "abc";
final Instant paidAt = Instant.ofEpochSecond(1_000_000);
final Instant fallBackTimestamp = Instant.ofEpochSecond(2_000_000);
oneTimeDonationsManager.putPaidAt(validPaymentIntentId, paidAt).join();
assertThat(oneTimeDonationsManager.getPaidAt(validPaymentIntentId, fallBackTimestamp).join()).isEqualTo(paidAt);
assertThat(oneTimeDonationsManager.getPaidAt("invalidPaymentId", fallBackTimestamp).join()).isEqualTo(fallBackTimestamp);
}
}