From c4f84f8c689bb0a2c20f1501ac4b6a11a381ece3 Mon Sep 17 00:00:00 2001 From: Jannis Braun <151788261+TheZwiss@users.noreply.github.com> Date: Wed, 29 Apr 2026 21:31:56 +0200 Subject: [PATCH] test(federation): buildRelayPayload type-field forwarding --- .../utils/federationOutbox.systemType.test.ts | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 packages/server/src/utils/federationOutbox.systemType.test.ts diff --git a/packages/server/src/utils/federationOutbox.systemType.test.ts b/packages/server/src/utils/federationOutbox.systemType.test.ts new file mode 100644 index 00000000..4add98c5 --- /dev/null +++ b/packages/server/src/utils/federationOutbox.systemType.test.ts @@ -0,0 +1,38 @@ +import { describe, it, expect, vi } from 'vitest'; + +vi.mock('../utils/federationAuth.js', () => ({ + getOurOrigin: () => 'https://test.example', + buildFederationHeaders: () => ({}), + generateHmacSecret: () => 'secret', +})); + +describe('buildRelayPayload — type field', () => { + const user = { id: 'u1', homeUserId: 'u1', homeInstance: 'https://x.example' }; + + it('omits type for user messages (backward-compat with old peers)', async () => { + const { buildRelayPayload } = await import('./federationOutbox.js'); + const payload = buildRelayPayload( + { id: 'm1', type: 'user', content: 'hi', createdAt: 1 }, + user, + ); + expect((payload as any).type).toBeUndefined(); + }); + + it('omits type when not set (defaults to user)', async () => { + const { buildRelayPayload } = await import('./federationOutbox.js'); + const payload = buildRelayPayload( + { id: 'm1', content: 'hi', createdAt: 1 }, + user, + ); + expect((payload as any).type).toBeUndefined(); + }); + + it('emits type for system messages', async () => { + const { buildRelayPayload } = await import('./federationOutbox.js'); + const payload = buildRelayPayload( + { id: 'm1', type: 'system', content: '{"event":"space_invite"}', createdAt: 1 }, + user, + ); + expect((payload as any).type).toBe('system'); + }); +});