@bsv/p2p
Version:
A client for P2P messaging and payments
87 lines • 4.09 kB
JavaScript
import { MessageBoxClient } from '../../MessageBoxClient.js';
import { WalletClient } from '@bsv/sdk';
import { webcrypto } from 'crypto';
global.self = { crypto: webcrypto };
const WS_URL = 'https://messagebox.babbage.systems';
let recipientKey;
const messageBox = 'testBox';
const testMessage = 'Hello, this is a WebSocket integration test.';
const walletClient = new WalletClient('json-api', 'localhost');
const messageBoxClient = new MessageBoxClient({
host: WS_URL,
walletClient
});
describe('MessageBoxClient WebSocket Integration Tests', () => {
beforeAll(async () => {
const keyResult = await walletClient.getPublicKey({ identityKey: true });
recipientKey = keyResult.publicKey;
console.log(`Recipient Key: ${recipientKey}`);
});
afterAll(async () => {
console.log('Closing WebSocket connection after tests.');
await messageBoxClient.disconnectWebSocket(); // Use the new method
});
/** TEST 1: Authenticate WebSocket Connection **/
test('should authenticate and connect via WebSocket', async () => {
await messageBoxClient.initializeConnection();
expect(messageBoxClient).toBeDefined();
console.log('[TEST] WebSocket authenticated and connected');
}, 15000);
/** TEST 2: Join a WebSocket Room **/
test('should join a WebSocket room successfully', async () => {
await messageBoxClient.joinRoom(messageBox);
console.log(`Joined WebSocket room: ${messageBox}`);
// Verify that the room was actually joined
expect(messageBoxClient.getJoinedRooms().has(`${messageBoxClient.getIdentityKey()}-${messageBox}`)).toBe(true);
});
/** TEST 3: Send and Receive a Message via WebSocket **/
test('should send and receive a message via WebSocket', async () => {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
let receivedMessage = null;
// Create a promise to wait for the received message
const messagePromise = new Promise((resolve, reject) => {
messageBoxClient
.listenForLiveMessages({
messageBox,
onMessage: (message) => {
try {
receivedMessage = message;
console.log('[TEST] Received message:', JSON.stringify(message, null, 2));
resolve(message);
}
catch (error) {
console.error('[ERROR] Error processing message:', error);
reject(error);
}
}
})
.catch(reject); // Handle potential listener setup errors
setTimeout(() => reject(new Error('Test timed out: No message received over WebSocket')), 10000);
});
// Ensure WebSocket room is joined before sending
await messageBoxClient.joinRoom(messageBox);
console.log(`[TEST] Sending message to WebSocket room: ${messageBox}`);
// Send the message via WebSocket
const response = await messageBoxClient.sendLiveMessage({
recipient: recipientKey,
messageBox,
body: testMessage
});
// Ensure message sending was successful
expect(response).toHaveProperty('status', 'success');
// Wait for the received message
const received = await messagePromise;
// Validate received message
expect(received).not.toBeNull();
expect(received.body).toBe(testMessage);
expect(received.sender).toBe(recipientKey);
}, 15000);
/** TEST 4: Leave a WebSocket Room **/
test('should leave a WebSocket room successfully', async () => {
await messageBoxClient.leaveRoom(messageBox);
console.log(`[TEST] Left WebSocket room: ${messageBox}`);
// Ensure the room is removed from joinedRooms
expect(messageBoxClient.getJoinedRooms().has(`${messageBoxClient.getIdentityKey()}-${messageBox}`)).toBe(false);
});
});
//# sourceMappingURL=integrationWS.test.js.map