UNPKG

@joystick.js/db-canary

Version:

JoystickDB - A minimalist database server for the Joystick framework

156 lines (107 loc) 4.2 kB
import test from 'ava'; import { decode as decode_messagepack } from 'msgpackr'; import { send_success, send_error, send_message } from '../../../src/server/lib/send_response.js'; class MockSocket { constructor() { this.written_data = []; } write(data) { this.written_data.push(data); } get_last_written() { return this.written_data[this.written_data.length - 1]; } get_decoded_last_written() { const last_data = this.get_last_written(); if (last_data.length < 4) { throw new Error('Invalid message format: too short'); } const length = last_data.readUInt32BE(0); const payload = last_data.slice(4); if (payload.length !== length) { throw new Error(`Invalid message format: expected ${length} bytes, got ${payload.length}`); } return decode_messagepack(payload); } } test('send_success sends properly formatted success response', (t) => { const mock_socket = new MockSocket(); const test_data = { user_id: 123, name: 'test' }; send_success(mock_socket, test_data); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, true); t.deepEqual(response.data, test_data); t.is(response.error, undefined); }); test('send_success with empty data object', (t) => { const mock_socket = new MockSocket(); send_success(mock_socket, {}); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, true); t.deepEqual(response.data, {}); }); test('send_success with no data parameter uses empty object', (t) => { const mock_socket = new MockSocket(); send_success(mock_socket); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, true); t.deepEqual(response.data, {}); }); test('send_error sends properly formatted error response', (t) => { const mock_socket = new MockSocket(); const test_error = { message: 'Something went wrong', code: 500 }; send_error(mock_socket, test_error); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, false); t.deepEqual(response.error, test_error); t.is(response.data, undefined); }); test('send_error with empty error object', (t) => { const mock_socket = new MockSocket(); send_error(mock_socket, {}); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, false); t.deepEqual(response.error, {}); }); test('send_error with no error parameter uses empty object', (t) => { const mock_socket = new MockSocket(); send_error(mock_socket); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, false); t.deepEqual(response.error, {}); }); test('send_message sends message in data object', (t) => { const mock_socket = new MockSocket(); const test_message = 'Operation completed successfully'; send_message(mock_socket, test_message); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, true); t.deepEqual(response.data, { message: test_message }); t.is(response.error, undefined); }); test('send_message with empty string', (t) => { const mock_socket = new MockSocket(); send_message(mock_socket, ''); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, true); t.deepEqual(response.data, { message: '' }); }); test('send_message with no message parameter uses empty string', (t) => { const mock_socket = new MockSocket(); send_message(mock_socket); const response = mock_socket.get_decoded_last_written(); t.is(response.ok, true); t.deepEqual(response.data, { message: '' }); }); test('all functions encode responses as messagepack', (t) => { const mock_socket = new MockSocket(); send_success(mock_socket, { test: 'data' }); const success_data = mock_socket.get_last_written(); t.true(Buffer.isBuffer(success_data)); send_error(mock_socket, { test: 'error' }); const error_data = mock_socket.get_last_written(); t.true(Buffer.isBuffer(error_data)); send_message(mock_socket, 'test message'); const message_data = mock_socket.get_last_written(); t.true(Buffer.isBuffer(message_data)); });