mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-21 04:59:14 +00:00
add tests for takeoverOnConflict (#1170)
* add tests * fix module test, remove unused CryptoLib
This commit is contained in:
@@ -8,7 +8,6 @@ exports.ExposeStore = (moduleRaidStr) => {
|
|||||||
window.Store = Object.assign({}, window.mR.findModule(m => m.default && m.default.Chat)[0].default);
|
window.Store = Object.assign({}, window.mR.findModule(m => m.default && m.default.Chat)[0].default);
|
||||||
window.Store.AppState = window.mR.findModule('STREAM')[0].Socket;
|
window.Store.AppState = window.mR.findModule('STREAM')[0].Socket;
|
||||||
window.Store.Conn = window.mR.findModule('Conn')[0].Conn;
|
window.Store.Conn = window.mR.findModule('Conn')[0].Conn;
|
||||||
window.Store.CryptoLib = window.mR.findModule('decryptE2EMedia')[0];
|
|
||||||
window.Store.Wap = window.mR.findModule('queryLinkPreview')[0].default;
|
window.Store.Wap = window.mR.findModule('queryLinkPreview')[0].default;
|
||||||
window.Store.SendSeen = window.mR.findModule('sendSeen')[0];
|
window.Store.SendSeen = window.mR.findModule('sendSeen')[0];
|
||||||
window.Store.SendClear = window.mR.findModule('sendClear')[0];
|
window.Store.SendClear = window.mR.findModule('sendClear')[0];
|
||||||
|
|||||||
106
tests/client.js
106
tests/client.js
@@ -7,7 +7,7 @@ const Contact = require('../src/structures/Contact');
|
|||||||
const Message = require('../src/structures/Message');
|
const Message = require('../src/structures/Message');
|
||||||
const MessageMedia = require('../src/structures/MessageMedia');
|
const MessageMedia = require('../src/structures/MessageMedia');
|
||||||
const Location = require('../src/structures/Location');
|
const Location = require('../src/structures/Location');
|
||||||
const { MessageTypes } = require('../src/util/Constants');
|
const { MessageTypes, WAState } = require('../src/util/Constants');
|
||||||
|
|
||||||
const remoteId = helper.remoteId;
|
const remoteId = helper.remoteId;
|
||||||
|
|
||||||
@@ -145,6 +145,46 @@ describe('Client', function() {
|
|||||||
|
|
||||||
await client.destroy();
|
await client.destroy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('can take over if client was logged in somewhere else with takeoverOnConflict=true', async function() {
|
||||||
|
this.timeout(40000);
|
||||||
|
|
||||||
|
const readyCallback1 = sinon.spy();
|
||||||
|
const readyCallback2 = sinon.spy();
|
||||||
|
const disconnectedCallback1 = sinon.spy();
|
||||||
|
const disconnectedCallback2 = sinon.spy();
|
||||||
|
|
||||||
|
const client1 = helper.createClient({
|
||||||
|
withSession: true,
|
||||||
|
options: { takeoverOnConflict: true, takeoverTimeoutMs: 5000 }
|
||||||
|
});
|
||||||
|
const client2 = helper.createClient({withSession: true});
|
||||||
|
|
||||||
|
client1.on('ready', readyCallback1);
|
||||||
|
client2.on('ready', readyCallback2);
|
||||||
|
client1.on('disconnected', disconnectedCallback1);
|
||||||
|
client2.on('disconnected', disconnectedCallback2);
|
||||||
|
|
||||||
|
await client1.initialize();
|
||||||
|
expect(readyCallback1.called).to.equal(true);
|
||||||
|
expect(readyCallback2.called).to.equal(false);
|
||||||
|
expect(disconnectedCallback1.called).to.equal(false);
|
||||||
|
expect(disconnectedCallback2.called).to.equal(false);
|
||||||
|
|
||||||
|
await client2.initialize();
|
||||||
|
expect(readyCallback2.called).to.equal(true);
|
||||||
|
expect(disconnectedCallback1.called).to.equal(false);
|
||||||
|
expect(disconnectedCallback2.called).to.equal(false);
|
||||||
|
|
||||||
|
// wait for takeoverTimeoutMs to kick in
|
||||||
|
await helper.sleep(5200);
|
||||||
|
expect(disconnectedCallback1.called).to.equal(false);
|
||||||
|
expect(disconnectedCallback2.called).to.equal(true);
|
||||||
|
expect(disconnectedCallback2.calledWith(WAState.CONFLICT)).to.equal(true);
|
||||||
|
|
||||||
|
await client1.destroy();
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Authenticated', function() {
|
describe('Authenticated', function() {
|
||||||
@@ -171,46 +211,46 @@ describe('Client', function() {
|
|||||||
|
|
||||||
it('exposes all required WhatsApp Web internal models', async function() {
|
it('exposes all required WhatsApp Web internal models', async function() {
|
||||||
const expectedModules = [
|
const expectedModules = [
|
||||||
'Chat',
|
|
||||||
'Msg',
|
|
||||||
'Contact',
|
|
||||||
'Conn',
|
|
||||||
'AppState',
|
'AppState',
|
||||||
'CryptoLib',
|
|
||||||
'Wap',
|
|
||||||
'SendSeen',
|
|
||||||
'SendClear',
|
|
||||||
'SendDelete',
|
|
||||||
'genId',
|
|
||||||
'SendMessage',
|
|
||||||
'MsgKey',
|
|
||||||
'Invite',
|
|
||||||
'OpaqueData',
|
|
||||||
'MediaPrep',
|
|
||||||
'MediaObject',
|
|
||||||
'MediaUpload',
|
|
||||||
'Cmd',
|
|
||||||
'MediaTypes',
|
|
||||||
'VCard',
|
|
||||||
'UserConstructor',
|
|
||||||
'Validators',
|
|
||||||
'WidFactory',
|
|
||||||
'BlockContact',
|
'BlockContact',
|
||||||
'GroupMetadata',
|
'Call',
|
||||||
'Sticker',
|
'Chat',
|
||||||
'UploadUtils',
|
'Cmd',
|
||||||
'Label',
|
'Conn',
|
||||||
|
'Contact',
|
||||||
|
'DownloadManager',
|
||||||
'Features',
|
'Features',
|
||||||
|
'GroupMetadata',
|
||||||
|
'Invite',
|
||||||
|
'Label',
|
||||||
|
'MediaObject',
|
||||||
|
'MediaPrep',
|
||||||
|
'MediaTypes',
|
||||||
|
'MediaUpload',
|
||||||
|
'Msg',
|
||||||
|
'MsgKey',
|
||||||
|
'OpaqueData',
|
||||||
'QueryOrder',
|
'QueryOrder',
|
||||||
'QueryProduct',
|
'QueryProduct',
|
||||||
'DownloadManager'
|
'SendClear',
|
||||||
|
'SendDelete',
|
||||||
|
'SendMessage',
|
||||||
|
'SendSeen',
|
||||||
|
'Sticker',
|
||||||
|
'UploadUtils',
|
||||||
|
'UserConstructor',
|
||||||
|
'VCard',
|
||||||
|
'Validators',
|
||||||
|
'Wap',
|
||||||
|
'WidFactory',
|
||||||
|
'genId'
|
||||||
];
|
];
|
||||||
|
|
||||||
const loadedModules = await client.pupPage.evaluate(() => {
|
const loadedModules = await client.pupPage.evaluate((expectedModules) => {
|
||||||
return Object.keys(window.Store);
|
return expectedModules.filter(m => Boolean(window.Store[m]));
|
||||||
});
|
}, expectedModules);
|
||||||
|
|
||||||
expect(loadedModules).to.include.members(expectedModules);
|
expect(loadedModules).to.have.members(expectedModules);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user