Remove temporary adaptation for nested `IncomingMessage.online`
This commit is contained in:
		
							parent
							
								
									c3f53c4dd9
								
							
						
					
					
						commit
						215621a9b0
					
				| 
						 | 
					@ -298,17 +298,8 @@ public class MessageController {
 | 
				
			||||||
      validateCompleteDeviceList(destination.get(), messages.getMessages(), isSyncMessage);
 | 
					      validateCompleteDeviceList(destination.get(), messages.getMessages(), isSyncMessage);
 | 
				
			||||||
      validateRegistrationIds(destination.get(), messages.getMessages());
 | 
					      validateRegistrationIds(destination.get(), messages.getMessages());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      // iOS versions prior to 5.5.0.7 send `online` on  IncomingMessageList.message, rather on the top-level entity.
 | 
					 | 
				
			||||||
      // This causes some odd client behaviors, such as persisted typing indicators, so we have a temporary
 | 
					 | 
				
			||||||
      // server-side adaptation.
 | 
					 | 
				
			||||||
      final boolean online = messages.getMessages()
 | 
					 | 
				
			||||||
          .stream()
 | 
					 | 
				
			||||||
          .findFirst()
 | 
					 | 
				
			||||||
          .map(IncomingMessage::isOnline)
 | 
					 | 
				
			||||||
          .orElse(messages.isOnline());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      final List<Tag> tags = List.of(UserAgentTagUtil.getPlatformTag(userAgent),
 | 
					      final List<Tag> tags = List.of(UserAgentTagUtil.getPlatformTag(userAgent),
 | 
				
			||||||
                                     Tag.of(EPHEMERAL_TAG_NAME, String.valueOf(online)),
 | 
					                                     Tag.of(EPHEMERAL_TAG_NAME, String.valueOf(messages.isOnline())),
 | 
				
			||||||
                                     Tag.of(SENDER_TYPE_TAG_NAME, senderType));
 | 
					                                     Tag.of(SENDER_TYPE_TAG_NAME, senderType));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      for (IncomingMessage incomingMessage : messages.getMessages()) {
 | 
					      for (IncomingMessage incomingMessage : messages.getMessages()) {
 | 
				
			||||||
| 
						 | 
					@ -316,7 +307,7 @@ public class MessageController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (destinationDevice.isPresent()) {
 | 
					        if (destinationDevice.isPresent()) {
 | 
				
			||||||
          Metrics.counter(SENT_MESSAGE_COUNTER_NAME, tags).increment();
 | 
					          Metrics.counter(SENT_MESSAGE_COUNTER_NAME, tags).increment();
 | 
				
			||||||
          sendMessage(source, destination.get(), destinationDevice.get(), messages.getTimestamp(), online, incomingMessage);
 | 
					          sendMessage(source, destination.get(), destinationDevice.get(), messages.getTimestamp(), messages.isOnline(), incomingMessage);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,9 +32,6 @@ public class IncomingMessage {
 | 
				
			||||||
  @JsonProperty
 | 
					  @JsonProperty
 | 
				
			||||||
  private long   timestamp; // deprecated
 | 
					  private long   timestamp; // deprecated
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  @JsonProperty
 | 
					 | 
				
			||||||
  private Boolean online; // use IncomingMessageList.online - this is a temporary adaptation for older clients
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  public String getDestination() {
 | 
					  public String getDestination() {
 | 
				
			||||||
    return destination;
 | 
					    return destination;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -62,8 +59,4 @@ public class IncomingMessage {
 | 
				
			||||||
  public String getContent() {
 | 
					  public String getContent() {
 | 
				
			||||||
    return content;
 | 
					    return content;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					 | 
				
			||||||
  public Boolean isOnline() {
 | 
					 | 
				
			||||||
    return online;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -583,37 +583,6 @@ class MessageControllerTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
  @ParameterizedTest
 | 
					 | 
				
			||||||
  @MethodSource
 | 
					 | 
				
			||||||
  void testOnlineMessage(final String fixture, final boolean expectedOnline) throws Exception {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    final Response response =
 | 
					 | 
				
			||||||
        resources.getJerseyTest()
 | 
					 | 
				
			||||||
            .target(String.format("/v1/messages/%s", SINGLE_DEVICE_RECIPIENT))
 | 
					 | 
				
			||||||
            .request()
 | 
					 | 
				
			||||||
            .header("Authorization", AuthHelper.getAuthHeader(AuthHelper.VALID_NUMBER, AuthHelper.VALID_PASSWORD))
 | 
					 | 
				
			||||||
            .put(Entity.entity(mapper.readValue(jsonFixture(fixture), IncomingMessageList.class),
 | 
					 | 
				
			||||||
                MediaType.APPLICATION_JSON_TYPE));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assertThat("Good Response", response.getStatus(), is(equalTo(200)));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    verify(messageSender, times(1)).sendMessage(any(Account.class), any(Device.class), any(Envelope.class), eq(expectedOnline));
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  private static Stream<Arguments> testOnlineMessage() {
 | 
					 | 
				
			||||||
    return Stream.of(
 | 
					 | 
				
			||||||
        Arguments.of("fixtures/current_message_single_device.json", false), // default to `false` when absent
 | 
					 | 
				
			||||||
        Arguments.of("fixtures/online_message_true.json", true),
 | 
					 | 
				
			||||||
        Arguments.of("fixtures/online_message_false.json", false),
 | 
					 | 
				
			||||||
        // iOS versions prior to 5.5.0.7 send `online` on  IncomingMessageList.message, rather on the top-level entity.
 | 
					 | 
				
			||||||
        // This causes some odd client behaviors, such as persisted typing indicators, so we have a temporary
 | 
					 | 
				
			||||||
        // server-side adaptation.
 | 
					 | 
				
			||||||
        Arguments.of("fixtures/online_message_true_nested_property.json", true),
 | 
					 | 
				
			||||||
        Arguments.of("fixtures/online_message_false_nested_property.json", false)
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  @Test
 | 
					  @Test
 | 
				
			||||||
  void testReportMessage() {
 | 
					  void testReportMessage() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  "online": false,
 | 
					 | 
				
			||||||
  "messages": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "type": 1,
 | 
					 | 
				
			||||||
      "destinationDeviceId": 1,
 | 
					 | 
				
			||||||
      "body": "Zm9vYmFyego",
 | 
					 | 
				
			||||||
      "timestamp": 1234
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  "messages": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "type": 1,
 | 
					 | 
				
			||||||
      "destinationDeviceId": 1,
 | 
					 | 
				
			||||||
      "body": "Zm9vYmFyego",
 | 
					 | 
				
			||||||
      "timestamp": 1234,
 | 
					 | 
				
			||||||
      "online": false
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  "online": true,
 | 
					 | 
				
			||||||
  "messages": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "type": 1,
 | 
					 | 
				
			||||||
      "destinationDeviceId": 1,
 | 
					 | 
				
			||||||
      "body": "Zm9vYmFyego",
 | 
					 | 
				
			||||||
      "timestamp": 1234
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,11 +0,0 @@
 | 
				
			||||||
{
 | 
					 | 
				
			||||||
  "messages": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "type": 1,
 | 
					 | 
				
			||||||
      "destinationDeviceId": 1,
 | 
					 | 
				
			||||||
      "body": "Zm9vYmFyego",
 | 
					 | 
				
			||||||
      "timestamp": 1234,
 | 
					 | 
				
			||||||
      "online": true
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue