Discard APNs tokens if the APNs server reports that the token is expired

This commit is contained in:
Jon Chambers 2024-07-08 13:12:26 -04:00 committed by Jon Chambers
parent 775889c0b6
commit 02b9ceb4c7
2 changed files with 6 additions and 5 deletions

View File

@ -167,7 +167,7 @@ public class APNSender implements Managed, PushNotificationSender {
} else {
accepted = false;
rejectionReason = response.getRejectionReason();
unregistered = response.getRejectionReason().map(reason -> "Unregistered".equals(reason) || "BadDeviceToken".equals(reason))
unregistered = response.getRejectionReason().map(reason -> "Unregistered".equals(reason) || "BadDeviceToken".equals(reason) || "ExpiredToken".equals(reason))
.orElse(false);
}

View File

@ -133,11 +133,12 @@ class APNSenderTest {
verifyNoMoreInteractions(apnsClient);
}
@Test
void testUnregisteredUser() {
@ParameterizedTest
@ValueSource(strings = {"Unregistered", "BadDeviceToken", "ExpiredToken"})
void testUnregisteredUser(final String rejectionReason) {
PushNotificationResponse<SimpleApnsPushNotification> response = mock(PushNotificationResponse.class);
when(response.isAccepted()).thenReturn(false);
when(response.getRejectionReason()).thenReturn(Optional.of("Unregistered"));
when(response.getRejectionReason()).thenReturn(Optional.of(rejectionReason));
when(apnsClient.sendNotification(any(SimpleApnsPushNotification.class)))
.thenAnswer(
@ -160,7 +161,7 @@ class APNSenderTest {
assertThat(notification.getValue().getPriority()).isEqualTo(DeliveryPriority.IMMEDIATE);
assertThat(result.accepted()).isFalse();
assertThat(result.errorCode()).hasValue("Unregistered");
assertThat(result.errorCode()).hasValue(rejectionReason);
assertThat(result.unregistered()).isTrue();
}