Преглед на файлове

Updates #2849: add test for incoming MUC OMEMO corrections

JC Brand преди 3 години
родител
ревизия
fbfd6c3ac4
променени са 1 файла, в които са добавени 57 реда и са изтрити 3 реда
  1. 57 3
      src/plugins/omemo/tests/corrections.js

+ 57 - 3
src/plugins/omemo/tests/corrections.js

@@ -376,8 +376,8 @@ describe("An OMEMO encrypted MUC message", function() {
         await u.waitUntil(() => view.querySelector('.chat-msg__text').textContent.replace(/<!-.*?->/g, '') === new_text);
 
         const fallback_text = 'This is an OMEMO encrypted message which your client doesn’t seem to support. Find more information on https://conversations.im/omemo';
-        const older_versions = first_msg.get('older_versions');
-        const keys = Object.keys(older_versions);
+        let older_versions = first_msg.get('older_versions');
+        let keys = Object.keys(older_versions);
         expect(keys.length).toBe(1);
         expect(older_versions[keys[0]]).toBe(original_text);
         expect(first_msg.get('plaintext')).toBe(new_text);
@@ -405,6 +405,60 @@ describe("An OMEMO encrypted MUC message", function() {
                     `<store xmlns="urn:xmpp:hints"/>`+
                     `<encryption namespace="eu.siacs.conversations.axolotl" xmlns="urn:xmpp:eme:0"/>`+
                 `</message>`);
-    }));
 
+
+        // Test reception of an encrypted message
+        const first_received_id = _converse.connection.getUniqueId()
+        const first_received_message = 'This is an encrypted message from the contact';
+        const first_obj = await omemo.encryptMessage(first_received_message)
+        _converse.connection._dataRecv(mock.createRequest($msg({
+                'from': `${muc_jid}/newguy`,
+                'to': _converse.connection.jid,
+                'type': 'groupchat',
+                'id': first_received_id
+            }).c('body').t(fallback_text).up()
+                .c('encrypted', {'xmlns': Strophe.NS.OMEMO})
+                    .c('header', {'sid':  '555'})
+                        .c('key', {'rid':  _converse.omemo_store.get('device_id')}).t(u.arrayBufferToBase64(first_obj.key_and_tag)).up()
+                        .c('iv').t(first_obj.iv)
+                        .up().up()
+                    .c('payload').t(first_obj.payload)));
+
+        await new Promise(resolve => view.model.messages.once('rendered', resolve));
+        expect(view.model.messages.length).toBe(2);
+        expect(view.querySelectorAll('.chat-msg__body')[1].textContent.trim()).toBe(first_received_message);
+        expect(_converse.devicelists.length).toBe(2);
+        expect(_converse.devicelists.at(0).get('jid')).toBe(_converse.bare_jid);
+        expect(_converse.devicelists.at(1).get('jid')).toBe(contact_jid);
+
+        const second_received_message = 'This is an edited encrypted message from the contact';
+        const second_obj = await omemo.encryptMessage(second_received_message)
+        _converse.connection._dataRecv(mock.createRequest($msg({
+                'from': `${muc_jid}/newguy`,
+                'to': _converse.connection.jid,
+                'type': 'groupchat',
+                'id': _converse.connection.getUniqueId()
+            }).c('body').t(fallback_text).up()
+                .c('replace',  {'id':first_received_id, 'xmlns': 'urn:xmpp:message-correct:0'})
+                .c('encrypted', {'xmlns': Strophe.NS.OMEMO})
+                    .c('header', {'sid':  '555'})
+                        .c('key', {'rid':  _converse.omemo_store.get('device_id')}).t(u.arrayBufferToBase64(second_obj.key_and_tag)).up()
+                        .c('iv').t(second_obj.iv)
+                        .up().up()
+                    .c('payload').t(second_obj.payload)));
+        await new Promise(resolve => view.model.messages.once('rendered', resolve));
+
+        expect(view.model.messages.length).toBe(2);
+        expect(view.querySelectorAll('.chat-msg__body')[1].textContent.trim()).toBe(second_received_message);
+
+        const message = view.model.messages.at(1);
+        older_versions = message.get('older_versions');
+        keys = Object.keys(older_versions);
+        expect(keys.length).toBe(1);
+        expect(older_versions[keys[0]]).toBe('This is an encrypted message from the contact');
+        expect(message.get('plaintext')).toBe('This is an edited encrypted message from the contact');
+        expect(message.get('is_encrypted')).toBe(true);
+        expect(message.get('body')).toBe(fallback_text);
+        expect(message.get('msgid')).toBe(first_received_id);
+    }));
 });