use of org.matrix.androidsdk.rest.model.message.RelatesTo in project matrix-android-sdk by matrix-org.
the class CryptoTest method test29_testAliceAndBobInAEncryptedRoomWithReplyTo.
/**
* We want to test that the relates_to data are well copied from e2e event to clear event
*
* @throws Exception
*/
@Test
public void test29_testAliceAndBobInAEncryptedRoomWithReplyTo() throws Exception {
Log.e(LOG_TAG, "test08_testAliceAndBobInAEncryptedRoom2");
Context context = InstrumentationRegistry.getContext();
CryptoTestData cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom(true);
final MXSession aliceSession = cryptoTestData.getFirstSession();
final String aliceRoomId = cryptoTestData.getRoomId();
final MXSession bobSession = cryptoTestData.getSecondSession();
bobSession.getCrypto().setWarnOnUnknownDevices(false);
aliceSession.getCrypto().setWarnOnUnknownDevices(false);
final Room roomFromBobPOV = bobSession.getDataHandler().getRoom(aliceRoomId);
final Room roomFromAlicePOV = aliceSession.getDataHandler().getRoom(aliceRoomId);
Assert.assertTrue(roomFromBobPOV.isEncrypted());
Assert.assertTrue(roomFromAlicePOV.isEncrypted());
final List<Event> bobReceivedEvents = new ArrayList<>();
final List<Event> aliceReceivedEvents = new ArrayList<>();
final int[] nbReceivedMessagesFromAlice = { 0 };
final int[] nbReceivedMessagesFromBob = { 0 };
final List<CountDownLatch> list = new ArrayList<>();
MXEventListener bobEventListener = new MXEventListener() {
@Override
public void onLiveEvent(Event event, RoomState roomState) {
if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), bobSession.getMyUserId())) {
bobReceivedEvents.add(event);
mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession);
nbReceivedMessagesFromAlice[0]++;
list.get(list.size() - 1).countDown();
}
}
};
MXEventListener aliceEventListener = new MXEventListener() {
@Override
public void onLiveEvent(Event event, RoomState roomState) {
if (TextUtils.equals(event.getType(), Event.EVENT_TYPE_MESSAGE) && !TextUtils.equals(event.getSender(), aliceSession.getMyUserId())) {
aliceReceivedEvents.add(event);
try {
// "In reply to" format for body
String expectedMessage = "> <" + aliceSession.getMyUserId() + "> " + mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0] - 1) + "\n\n" + mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]);
mCryptoTestHelper.checkEncryptedEvent(event, aliceRoomId, expectedMessage, bobSession);
nbReceivedMessagesFromBob[0]++;
list.get(list.size() - 1).countDown();
} catch (Exception e) {
}
}
}
};
ApiCallback<Void> callback = new SimpleApiCallback<Void>() {
@Override
public void onSuccess(Void info) {
// Ignore
}
};
roomFromBobPOV.addEventListener(bobEventListener);
roomFromAlicePOV.addEventListener(aliceEventListener);
list.add(new CountDownLatch(2));
final Map<String, Object> results = new HashMap<>();
bobSession.getDataHandler().addListener(new MXEventListener() {
@Override
public void onToDeviceEvent(Event event) {
results.put("onToDeviceEvent", event);
list.get(0).countDown();
}
});
// Alice sends a first event
roomFromAlicePOV.sendEvent(mCryptoTestHelper.buildTextEvent(mCryptoTestHelper.getMessagesFromAlice().get(nbReceivedMessagesFromAlice[0]), aliceSession, aliceRoomId), callback);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertTrue(results.containsKey("onToDeviceEvent"));
Assert.assertEquals(1, nbReceivedMessagesFromAlice[0]);
// Bob reply to Alice event
Assert.assertTrue(roomFromBobPOV.canReplyTo(bobReceivedEvents.get(0)));
list.add(new CountDownLatch(1));
roomFromBobPOV.sendTextMessage(mCryptoTestHelper.getMessagesFromBob().get(nbReceivedMessagesFromBob[0]), null, Message.MSGTYPE_TEXT, bobReceivedEvents.get(0), null);
mTestHelper.await(list.get(list.size() - 1));
Assert.assertEquals(1, nbReceivedMessagesFromBob[0]);
Event event = aliceReceivedEvents.get(0);
JsonObject json = event.getContentAsJsonObject();
Assert.assertNotNull(json);
// Check that the received event contains a formatted body
Assert.assertTrue(json.has("formatted_body"));
// Check that the received event contains the relates to field
Assert.assertTrue(json.has("m.relates_to"));
RelatesTo relatesTo = (RelatesTo) JsonUtils.toClass(json.get("m.relates_to"), RelatesTo.class);
Assert.assertNotNull(relatesTo);
// Check that the event id matches
Assert.assertEquals(bobReceivedEvents.get(0).eventId, relatesTo.dict.get("event_id"));
cryptoTestData.clear(context);
}
Aggregations