Pārlūkot izejas kodu

core: let logout return a promise and wait for it in tests

JC Brand 5 gadi atpakaļ
vecāks
revīzija
6253dd52a6
2 mainītis faili ar 20 papildinājumiem un 9 dzēšanām
  1. 16 7
      src/headless/converse-core.js
  2. 4 2
      tests/mock.js

+ 16 - 7
src/headless/converse-core.js

@@ -1552,17 +1552,26 @@ _converse.api = {
          * @example _converse.api.user.logout();
          * @example _converse.api.user.logout();
          */
          */
         logout () {
         logout () {
+            const promise = u.getResolveablePromise();
+            const complete = () => {
+                // Recreate all the promises
+                Object.keys(_converse.promises).forEach(addPromise);
+                /**
+                 * Triggered once the user has logged out.
+                 * @event _converse#logout
+                 */
+                _converse.api.trigger('logout');
+                promise.resolve();
+            }
+
             _converse.setDisconnectionCause(_converse.LOGOUT, undefined, true);
             _converse.setDisconnectionCause(_converse.LOGOUT, undefined, true);
             if (_converse.connection !== undefined) {
             if (_converse.connection !== undefined) {
+                _converse.api.listen.once('disconnected', () => complete());
                 _converse.connection.disconnect();
                 _converse.connection.disconnect();
+            } else {
+                complete();
             }
             }
-            // Recreate all the promises
-            Object.keys(_converse.promises).forEach(addPromise);
-            /**
-             * Triggered once the user has logged out.
-             * @event _converse#logout
-             */
-            _converse.api.trigger('logout');
+            return promise;
         },
         },
 
 
         /**
         /**

+ 4 - 2
tests/mock.js

@@ -262,8 +262,10 @@
         }
         }
         return async done => {
         return async done => {
             const _converse = await initConverse(settings, spies);
             const _converse = await initConverse(settings, spies);
-            function _done () {
-                _converse.api.user.logout();
+            async function _done () {
+                await _converse.api.user.logout();
+                const el = document.querySelector('#conversejs');
+                el.parentElement.removeChild(el);
                 done();
                 done();
             }
             }
             await Promise.all((promise_names || []).map(_converse.api.waitUntil));
             await Promise.all((promise_names || []).map(_converse.api.waitUntil));