UNPKG

@bsv/message-box-client

Version:

A client for P2P messaging and payments

128 lines 6.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-env jest */ const MessageBoxClient_js_1 = require("../../MessageBoxClient.js"); const sdk_1 = require("@bsv/sdk"); const crypto_1 = require("crypto"); // Ensure Jest doesn't mock WalletClient jest.unmock('@bsv/sdk'); global.self = { crypto: crypto_1.webcrypto }; jest.setTimeout(20000); // Explicitly initialize WalletClient with Meta Net Client (MNC) const walletClient = new sdk_1.WalletClient('json-api', 'localhost'); // Initialize MessageBoxClient for HTTP-Only Testing const messageBoxClient = new MessageBoxClient_js_1.MessageBoxClient({ host: 'https://messagebox.babbage.systems', walletClient }); describe('MessageBoxClient HTTP Integration Tests (No WebSocket)', () => { let recipientKey; let testMessageId; const messageBox = 'testBox'; const testMessage = 'Hello, this is an integration test.'; const testMessage2 = 'Another test message to avoid duplicates.'; beforeAll(async () => { try { console.log('[DEBUG] Retrieving public key...'); const publicKeyResponse = await walletClient.getPublicKey({ identityKey: true }); if ((publicKeyResponse === null || publicKeyResponse === void 0 ? void 0 : publicKeyResponse.publicKey) == null || typeof publicKeyResponse.publicKey !== 'string' || publicKeyResponse.publicKey.trim() === '') { throw new Error('[ERROR] getPublicKey returned an invalid key!'); } recipientKey = publicKeyResponse.publicKey.trim(); console.log('[DEBUG] Successfully assigned recipientKey:', recipientKey); // Ensure identity key is set internally in MessageBoxClient await messageBoxClient.initializeConnection(); } catch (error) { console.error('[ERROR] Failed to set up test:', error); throw error; } }); afterAll(async () => { try { if (testMessageId !== undefined && testMessageId !== '') { console.log('[DEBUG] Cleaning up test messages...'); } } catch (error) { console.error('[ERROR] Failed to acknowledge test message:', error); } }); /** TEST 1: Send a Message with Correct Payment **/ test('should send a message successfully with correct payment', async () => { const response = await messageBoxClient.sendMessage({ recipient: recipientKey, messageBox, body: testMessage, skipEncryption: true // TEMPORARY to test if this fixes the 400 }); console.log('[DEBUG] SendMessage Response:', response); expect(response).toHaveProperty('status', 'success'); expect(response).toHaveProperty('messageId', expect.any(String)); testMessageId = response.messageId; // Store for cleanup }, 30000); /** TEST 2: List Messages **/ test('should list messages from messageBox', async () => { const messages = await messageBoxClient.listMessages({ messageBox }); expect(messages.length).toBeGreaterThan(0); expect(messages.some(msg => msg.body === testMessage)).toBe(true); }, 15000); /** TEST 3: List Messages from an Empty MessageBox **/ test('should return an empty list if no messages exist', async () => { const messages = await messageBoxClient.listMessages({ messageBox: 'emptyBox' }); expect(messages).toEqual([]); }, 15000); /** TEST 4: Acknowledge a Message **/ test('should acknowledge (delete) a message', async () => { const ackResponse = await messageBoxClient.acknowledgeMessage({ messageIds: [testMessageId] }); expect(ackResponse).toBe('success'); }, 15000); /** TEST 5: Acknowledge a Nonexistent Message **/ test('should fail to acknowledge a nonexistent message', async () => { await expect(messageBoxClient.acknowledgeMessage({ messageIds: ['fakeMessageId'] })).rejects.toThrow('Message not found!'); }, 15000); /** TEST 6: Send Message with Invalid Recipient **/ test('should fail if recipient is invalid', async () => { await expect(messageBoxClient.sendMessage({ recipient: '', // Invalid recipient messageBox, body: testMessage })).rejects.toThrow('You must provide a message recipient!'); }, 15000); /** TEST 7: Send Message with Empty Body **/ test('should fail if message body is empty', async () => { await expect(messageBoxClient.sendMessage({ recipient: recipientKey, messageBox, body: '' // Empty message })).rejects.toThrow('Every message must have a body!'); }, 15000); /** TEST 8: Send Message with Excessive Payment (Should still succeed) **/ test('should send a message even if payment is more than required', async () => { const response = await messageBoxClient.sendMessage({ recipient: recipientKey, messageBox, body: testMessage2, skipEncryption: true }); console.log('[DEBUG] Overpayment SendMessage Response:', response); expect(response.status).toBe('success'); }, 15000); /** TEST: Send a message without encryption **/ test('should send a message without encryption when skipEncryption is true', async () => { const plaintextMessage = 'Unencrypted test message'; const response = await messageBoxClient.sendMessage({ recipient: recipientKey, messageBox, body: plaintextMessage, skipEncryption: true // Bypass encryption }); expect(response).toHaveProperty('status', 'success'); expect(response).toHaveProperty('messageId', expect.any(String)); const messages = await messageBoxClient.listMessages({ messageBox }); expect(messages.some(msg => msg.body === plaintextMessage)).toBe(true); }, 30000); }); //# sourceMappingURL=integrationHTTP.test.js.map