UNPKG

@bsv/p2p

Version:

A client for P2P messaging and payments

89 lines 4.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const MessageBoxClient_js_1 = require("../../MessageBoxClient.js"); const sdk_1 = require("@bsv/sdk"); const crypto_1 = require("crypto"); global.self = { crypto: crypto_1.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 sdk_1.WalletClient('json-api', 'localhost'); const messageBoxClient = new MessageBoxClient_js_1.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