Просмотр исходного кода

Move more tests from spec folder

JC Brand 4 лет назад
Родитель
Сommit
58b59fe263

+ 4 - 4
karma.conf.js

@@ -26,13 +26,9 @@ module.exports = function(config) {
       { pattern: "spec/mock.js", type: 'module' },
 
       { pattern: "spec/emojis.js", type: 'module' },
-      { pattern: "spec/http-file-upload.js", type: 'module' },
-      { pattern: "spec/markers.js", type: 'module' },
       { pattern: "spec/protocol.js", type: 'module' },
       { pattern: "spec/push.js", type: 'module' },
-      { pattern: "spec/retractions.js", type: 'module' },
       { pattern: "spec/user-details-modal.js", type: 'module' },
-      { pattern: "spec/utils.js", type: 'module' },
       { pattern: "src/headless/plugins/caps/tests/caps.js", type: 'module' },
       { pattern: "src/headless/plugins/chat/tests/api.js", type: 'module' },
       { pattern: "src/headless/plugins/disco/tests/disco.js", type: 'module' },
@@ -46,6 +42,8 @@ module.exports = function(config) {
       { pattern: "src/plugins/bookmark-views/tests/bookmarks.js", type: 'module' },
       { pattern: "src/plugins/chatview/tests/chatbox.js", type: 'module' },
       { pattern: "src/plugins/chatview/tests/corrections.js", type: 'module' },
+      { pattern: "src/plugins/chatview/tests/http-file-upload.js", type: 'module' },
+      { pattern: "src/plugins/chatview/tests/markers.js", type: 'module' },
       { pattern: "src/plugins/chatview/tests/me-messages.js", type: 'module' },
       { pattern: "src/plugins/chatview/tests/message-images.js", type: 'module' },
       { pattern: "src/plugins/chatview/tests/messages.js", type: 'module' },
@@ -61,6 +59,7 @@ module.exports = function(config) {
       { pattern: "src/plugins/muc-views/tests/component.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/corrections.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/hats.js", type: 'module' },
+      { pattern: "src/plugins/muc-views/tests/http-file-upload.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/mentions.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/modtools.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/muc-api.js", type: 'module' },
@@ -70,6 +69,7 @@ module.exports = function(config) {
       { pattern: "src/plugins/muc-views/tests/muc.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/muclist.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/rai.js", type: 'module' },
+      { pattern: "src/plugins/muc-views/tests/retractions.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/styling.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/unfurls.js", type: 'module' },
       { pattern: "src/plugins/muc-views/tests/xss.js", type: 'module' },

+ 6 - 142
spec/http-file-upload.js → src/plugins/chatview/tests/http-file-upload.js

@@ -1,8 +1,7 @@
-/*global mock, converse, _ */
+/*global mock, converse */
 
 const Strophe = converse.env.Strophe;
 const $iq = converse.env.$iq;
-const sizzle = converse.env.sizzle;
 const u = converse.env.utils;
 
 describe("XEP-0363: HTTP File Upload", function () {
@@ -158,21 +157,6 @@ describe("XEP-0363: HTTP File Upload", function () {
                 expect(view.querySelector('.chat-toolbar .fileupload')).toBe(null);
                 done();
             }));
-
-            it("does not appear in MUC chats", mock.initConverse([], {}, async (done, _converse) => {
-                await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-                mock.waitUntilDiscoConfirmed(
-                    _converse, _converse.domain,
-                    [{'category': 'server', 'type':'IM'}],
-                    ['http://jabber.org/protocol/disco#items'], [], 'info');
-
-                await mock.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], [], 'items');
-                const view = _converse.chatboxviews.get('lounge@montague.lit');
-                await u.waitUntil(() => view.querySelector('.chat-toolbar .fileupload') === null);
-                expect(1).toBe(1);
-                done();
-            }));
-
         });
     });
 
@@ -197,21 +181,6 @@ describe("XEP-0363: HTTP File Upload", function () {
                 done();
             }));
 
-            it("appears in MUC chats", mock.initConverse(['chatBoxesFetched'], {}, async (done, _converse) => {
-                await mock.waitUntilDiscoConfirmed(
-                    _converse, _converse.domain,
-                    [{'category': 'server', 'type':'IM'}],
-                    ['http://jabber.org/protocol/disco#items'], [], 'info');
-
-                await mock.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], ['upload.montague.lit'], 'items');
-                await mock.waitUntilDiscoConfirmed(_converse, 'upload.montague.lit', [], [Strophe.NS.HTTPUPLOAD], []);
-                await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-                await u.waitUntil(() => _converse.chatboxviews.get('lounge@montague.lit').querySelector('.fileupload'));
-                const view = _converse.chatboxviews.get('lounge@montague.lit');
-                expect(view.querySelector('.chat-toolbar .fileupload')).not.toBe(null);
-                done();
-            }));
-
             describe("when clicked and a file chosen", function () {
 
                 it("is uploaded and sent out", mock.initConverse(['chatBoxesFetched'], {} ,async (done, _converse) => {
@@ -238,7 +207,7 @@ describe("XEP-0363: HTTP File Upload", function () {
                     };
                     view.model.sendFiles([file]);
 
-                    await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
+                    await u.waitUntil(() => IQ_stanzas.filter(iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
                     const iq = IQ_stanzas.pop();
                     expect(Strophe.serialize(iq)).toBe(
                         `<iq from="romeo@montague.lit/orchard" `+
@@ -316,111 +285,6 @@ describe("XEP-0363: HTTP File Upload", function () {
                     done();
                 }));
 
-                it("is uploaded and sent out from a groupchat", mock.initConverse(['chatBoxesFetched'], {} ,async (done, _converse) => {
-                    const base_url = 'https://conversejs.org';
-                    await mock.waitUntilDiscoConfirmed(
-                        _converse, _converse.domain,
-                        [{'category': 'server', 'type':'IM'}],
-                        ['http://jabber.org/protocol/disco#items'], [], 'info');
-
-                    const send_backup = XMLHttpRequest.prototype.send;
-                    const IQ_stanzas = _converse.connection.IQ_stanzas;
-
-                    await mock.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], ['upload.montague.tld'], 'items');
-                    await mock.waitUntilDiscoConfirmed(_converse, 'upload.montague.tld', [], [Strophe.NS.HTTPUPLOAD], []);
-                    await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
-
-                    // Wait until MAM query has been sent out
-                    const sent_stanzas = _converse.connection.sent_stanzas;
-                    await u.waitUntil(() => sent_stanzas.filter(s => sizzle(`[xmlns="${Strophe.NS.MAM}"]`, s).length).pop());
-
-                    const view = _converse.chatboxviews.get('lounge@montague.lit');
-                    const file = {
-                        'type': 'image/jpeg',
-                        'size': '23456' ,
-                        'lastModifiedDate': "",
-                        'name': "my-juliet.jpg"
-                    };
-                    view.model.sendFiles([file]);
-
-                    await u.waitUntil(() => _.filter(IQ_stanzas, iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
-                    const iq = IQ_stanzas.pop();
-                    expect(Strophe.serialize(iq)).toBe(
-                        `<iq from="romeo@montague.lit/orchard" `+
-                            `id="${iq.getAttribute("id")}" `+
-                            `to="upload.montague.tld" `+
-                            `type="get" `+
-                            `xmlns="jabber:client">`+
-                        `<request `+
-                            `content-type="image/jpeg" `+
-                            `filename="my-juliet.jpg" `+
-                            `size="23456" `+
-                            `xmlns="urn:xmpp:http:upload:0"/>`+
-                        `</iq>`);
-
-                    const message = base_url+"/logo/conversejs-filled.svg";
-                    const stanza = u.toStanza(`
-                        <iq from='upload.montague.tld'
-                            id="${iq.getAttribute('id')}"
-                            to='romeo@montague.lit/orchard'
-                            type='result'>
-                        <slot xmlns='urn:xmpp:http:upload:0'>
-                            <put url='https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my-juliet.jpg'>
-                            <header name='Authorization'>Basic Base64String==</header>
-                            <header name='Cookie'>foo=bar; user=romeo</header>
-                            </put>
-                            <get url="${message}" />
-                        </slot>
-                        </iq>`);
-
-                    spyOn(XMLHttpRequest.prototype, 'send').and.callFake(async function () {
-                        const message = view.model.messages.at(0);
-                        const el = await u.waitUntil(() => view.querySelector('.chat-content progress'));
-                        expect(el.getAttribute('value')).toBe('0');
-                        message.set('progress', 0.5);
-                        await u.waitUntil(() => view.querySelector('.chat-content progress').getAttribute('value') === '0.5')
-                        message.set('progress', 1);
-                        await u.waitUntil(() => view.querySelector('.chat-content progress')?.getAttribute('value') === '1')
-                        message.save({
-                            'upload': _converse.SUCCESS,
-                            'oob_url': message.get('get'),
-                            'message': message.get('get')
-                        });
-                        await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length);
-                    });
-                    let sent_stanza;
-                    spyOn(_converse.connection, 'send').and.callFake(stanza => (sent_stanza = stanza));
-                    _converse.connection._dataRecv(mock.createRequest(stanza));
-
-                    await u.waitUntil(() => sent_stanza, 1000);
-                    expect(sent_stanza.toLocaleString()).toBe(
-                        `<message `+
-                            `from="romeo@montague.lit/orchard" `+
-                            `id="${sent_stanza.nodeTree.getAttribute("id")}" `+
-                            `to="lounge@montague.lit" `+
-                            `type="groupchat" `+
-                            `xmlns="jabber:client">`+
-                                `<body>${message}</body>`+
-                                `<active xmlns="http://jabber.org/protocol/chatstates"/>`+
-                                `<x xmlns="jabber:x:oob">`+
-                                    `<url>${message}</url>`+
-                                `</x>`+
-                                `<origin-id id="${sent_stanza.nodeTree.querySelector('origin-id').getAttribute("id")}" xmlns="urn:xmpp:sid:0"/>`+
-                        `</message>`);
-                    const img_link_el = await u.waitUntil(() => view.querySelector('converse-chat-message-body .chat-image__link'), 1000);
-                    // Check that the image renders
-                    expect(img_link_el.outerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
-                        `<a class="chat-image__link" target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
-                        `<img class="chat-image img-thumbnail" src="${base_url}/logo/conversejs-filled.svg"></a>`);
-
-                    expect(view.querySelector('.chat-msg .chat-msg__media').innerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
-                        `<a target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
-                        `Download image file "conversejs-filled.svg"</a>`);
-
-                    XMLHttpRequest.prototype.send = send_backup;
-                    done();
-                }));
-
                 it("shows an error message if the file is too large",
                         mock.initConverse(['chatBoxesFetched'], {}, async function (done, _converse) {
 
@@ -463,7 +327,7 @@ describe("XEP-0363: HTTP File Upload", function () {
                     await u.waitUntil(function () {
                         // Converse.js sees that the entity has a disco#items feature,
                         // so it will make a query for it.
-                        return _.filter(IQ_stanzas, function (iq) {
+                        return IQ_stanzas.filter(function (iq) {
                             return iq.querySelector('iq[to="montague.lit"] query[xmlns="http://jabber.org/protocol/disco#items"]');
                         }).length > 0;
                     }, 300);
@@ -491,9 +355,9 @@ describe("XEP-0363: HTTP File Upload", function () {
                     await u.waitUntil(function () {
                         // Converse.js sees that the entity has a disco#info feature,
                         // so it will make a query for it.
-                        return _.filter(IQ_stanzas, function (iq) {
-                            return iq.querySelector('iq[to="upload.montague.lit"] query[xmlns="http://jabber.org/protocol/disco#info"]');
-                        }).length > 0;
+                        return IQ_stanzas.filter(iq =>
+                            iq.querySelector('iq[to="upload.montague.lit"] query[xmlns="http://jabber.org/protocol/disco#info"]')
+                        ).length > 0;
                     }, 300);
 
                     stanza = IQ_stanzas.find(iq => iq.querySelector('iq[to="upload.montague.lit"] query[xmlns="http://jabber.org/protocol/disco#info"]'));

+ 0 - 0
spec/markers.js → src/plugins/chatview/tests/markers.js


+ 158 - 0
src/plugins/muc-views/tests/http-file-upload.js

@@ -0,0 +1,158 @@
+/*global mock, converse */
+
+const { Strophe, sizzle, u } = converse.env;
+
+
+describe("XEP-0363: HTTP File Upload", function () {
+
+    describe("When not supported", function () {
+        describe("A file upload toolbar button", function () {
+
+            it("does not appear in MUC chats", mock.initConverse([], {}, async (done, _converse) => {
+                await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
+                mock.waitUntilDiscoConfirmed(
+                    _converse, _converse.domain,
+                    [{'category': 'server', 'type':'IM'}],
+                    ['http://jabber.org/protocol/disco#items'], [], 'info');
+
+                await mock.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], [], 'items');
+                const view = _converse.chatboxviews.get('lounge@montague.lit');
+                await u.waitUntil(() => view.querySelector('.chat-toolbar .fileupload') === null);
+                expect(1).toBe(1);
+                done();
+            }));
+
+        });
+    });
+
+    describe("When supported", function () {
+
+        describe("A file upload toolbar button", function () {
+
+            it("appears in MUC chats", mock.initConverse(['chatBoxesFetched'], {}, async (done, _converse) => {
+                await mock.waitUntilDiscoConfirmed(
+                    _converse, _converse.domain,
+                    [{'category': 'server', 'type':'IM'}],
+                    ['http://jabber.org/protocol/disco#items'], [], 'info');
+
+                await mock.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], ['upload.montague.lit'], 'items');
+                await mock.waitUntilDiscoConfirmed(_converse, 'upload.montague.lit', [], [Strophe.NS.HTTPUPLOAD], []);
+                await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
+                await u.waitUntil(() => _converse.chatboxviews.get('lounge@montague.lit').querySelector('.fileupload'));
+                const view = _converse.chatboxviews.get('lounge@montague.lit');
+                expect(view.querySelector('.chat-toolbar .fileupload')).not.toBe(null);
+                done();
+            }));
+
+            describe("when clicked and a file chosen", function () {
+
+                it("is uploaded and sent out from a groupchat", mock.initConverse(['chatBoxesFetched'], {} ,async (done, _converse) => {
+                    const base_url = 'https://conversejs.org';
+                    await mock.waitUntilDiscoConfirmed(
+                        _converse, _converse.domain,
+                        [{'category': 'server', 'type':'IM'}],
+                        ['http://jabber.org/protocol/disco#items'], [], 'info');
+
+                    const send_backup = XMLHttpRequest.prototype.send;
+                    const IQ_stanzas = _converse.connection.IQ_stanzas;
+
+                    await mock.waitUntilDiscoConfirmed(_converse, _converse.domain, [], [], ['upload.montague.tld'], 'items');
+                    await mock.waitUntilDiscoConfirmed(_converse, 'upload.montague.tld', [], [Strophe.NS.HTTPUPLOAD], []);
+                    await mock.openAndEnterChatRoom(_converse, 'lounge@montague.lit', 'romeo');
+
+                    // Wait until MAM query has been sent out
+                    const sent_stanzas = _converse.connection.sent_stanzas;
+                    await u.waitUntil(() => sent_stanzas.filter(s => sizzle(`[xmlns="${Strophe.NS.MAM}"]`, s).length).pop());
+
+                    const view = _converse.chatboxviews.get('lounge@montague.lit');
+                    const file = {
+                        'type': 'image/jpeg',
+                        'size': '23456' ,
+                        'lastModifiedDate': "",
+                        'name': "my-juliet.jpg"
+                    };
+                    view.model.sendFiles([file]);
+
+                    await u.waitUntil(() => IQ_stanzas.filter(iq => iq.querySelector('iq[to="upload.montague.tld"] request')).length);
+                    const iq = IQ_stanzas.pop();
+                    expect(Strophe.serialize(iq)).toBe(
+                        `<iq from="romeo@montague.lit/orchard" `+
+                            `id="${iq.getAttribute("id")}" `+
+                            `to="upload.montague.tld" `+
+                            `type="get" `+
+                            `xmlns="jabber:client">`+
+                        `<request `+
+                            `content-type="image/jpeg" `+
+                            `filename="my-juliet.jpg" `+
+                            `size="23456" `+
+                            `xmlns="urn:xmpp:http:upload:0"/>`+
+                        `</iq>`);
+
+                    const message = base_url+"/logo/conversejs-filled.svg";
+                    const stanza = u.toStanza(`
+                        <iq from='upload.montague.tld'
+                            id="${iq.getAttribute('id')}"
+                            to='romeo@montague.lit/orchard'
+                            type='result'>
+                        <slot xmlns='urn:xmpp:http:upload:0'>
+                            <put url='https://upload.montague.tld/4a771ac1-f0b2-4a4a-9700-f2a26fa2bb67/my-juliet.jpg'>
+                            <header name='Authorization'>Basic Base64String==</header>
+                            <header name='Cookie'>foo=bar; user=romeo</header>
+                            </put>
+                            <get url="${message}" />
+                        </slot>
+                        </iq>`);
+
+                    spyOn(XMLHttpRequest.prototype, 'send').and.callFake(async function () {
+                        const message = view.model.messages.at(0);
+                        const el = await u.waitUntil(() => view.querySelector('.chat-content progress'));
+                        expect(el.getAttribute('value')).toBe('0');
+                        message.set('progress', 0.5);
+                        await u.waitUntil(() => view.querySelector('.chat-content progress').getAttribute('value') === '0.5')
+                        message.set('progress', 1);
+                        await u.waitUntil(() => view.querySelector('.chat-content progress')?.getAttribute('value') === '1')
+                        message.save({
+                            'upload': _converse.SUCCESS,
+                            'oob_url': message.get('get'),
+                            'message': message.get('get')
+                        });
+                        await u.waitUntil(() => view.querySelectorAll('.chat-msg__text').length);
+                    });
+                    let sent_stanza;
+                    spyOn(_converse.connection, 'send').and.callFake(stanza => (sent_stanza = stanza));
+                    _converse.connection._dataRecv(mock.createRequest(stanza));
+
+                    await u.waitUntil(() => sent_stanza, 1000);
+                    expect(sent_stanza.toLocaleString()).toBe(
+                        `<message `+
+                            `from="romeo@montague.lit/orchard" `+
+                            `id="${sent_stanza.nodeTree.getAttribute("id")}" `+
+                            `to="lounge@montague.lit" `+
+                            `type="groupchat" `+
+                            `xmlns="jabber:client">`+
+                                `<body>${message}</body>`+
+                                `<active xmlns="http://jabber.org/protocol/chatstates"/>`+
+                                `<x xmlns="jabber:x:oob">`+
+                                    `<url>${message}</url>`+
+                                `</x>`+
+                                `<origin-id id="${sent_stanza.nodeTree.querySelector('origin-id').getAttribute("id")}" xmlns="urn:xmpp:sid:0"/>`+
+                        `</message>`);
+                    const img_link_el = await u.waitUntil(() => view.querySelector('converse-chat-message-body .chat-image__link'), 1000);
+                    // Check that the image renders
+                    expect(img_link_el.outerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
+                        `<a class="chat-image__link" target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
+                        `<img class="chat-image img-thumbnail" src="${base_url}/logo/conversejs-filled.svg"></a>`);
+
+                    expect(view.querySelector('.chat-msg .chat-msg__media').innerHTML.replace(/<!-.*?->/g, '').trim()).toEqual(
+                        `<a target="_blank" rel="noopener" href="${base_url}/logo/conversejs-filled.svg">`+
+                        `Download image file "conversejs-filled.svg"</a>`);
+
+                    XMLHttpRequest.prototype.send = send_backup;
+                    done();
+                }));
+
+
+            });
+        });
+    });
+});

+ 0 - 0
spec/retractions.js → src/plugins/muc-views/tests/retractions.js