diff --git a/src/clients/channels-client.test.ts b/src/clients/channels-client.test.ts new file mode 100644 index 0000000..02370c0 --- /dev/null +++ b/src/clients/channels-client.test.ts @@ -0,0 +1,66 @@ +import { http, HttpResponse } from 'msw' +import { describe, expect, it } from 'vitest' +import { CommsApi } from '../comms-api' +import { server } from '../testUtils/msw-setup' +import { + TEST_API_BASE_URL as BASE, + TEST_API_TOKEN, + TEST_CHANNEL_ID, +} from '../testUtils/test-defaults' + +const CHANNEL_RESPONSE = { + id: TEST_CHANNEL_ID, + name: 'General', + creator: 1, + public: true, + workspace_id: 1, + archived: false, + created_ts: 1_609_459_200, + version: 1, +} + +describe('ChannelsClient — wire serialization', () => { + it.each([ + ['createChannel', true], + ['createChannel', false], + ['updateChannel', true], + ['updateChannel', false], + ] as const)( + '%s sends use_default_recipients: %s and empty default audience arrays', + async (method, useDefaultRecipients) => { + const suffix = method === 'createChannel' ? 'add' : 'update' + let body: Record | undefined + server.use( + http.post(`${BASE}/channels/${suffix}`, async ({ request }) => { + body = (await request.json()) as Record + return HttpResponse.json(CHANNEL_RESPONSE) + }), + ) + + const api = new CommsApi(TEST_API_TOKEN) + if (method === 'createChannel') { + await api.channels.createChannel({ + workspaceId: 1, + name: 'General', + useDefaultRecipients, + defaultGroups: [], + defaultRecipients: [], + }) + } else { + await api.channels.updateChannel({ + id: TEST_CHANNEL_ID, + name: 'General', + useDefaultRecipients, + defaultGroups: [], + defaultRecipients: [], + }) + } + + expect(body).toMatchObject({ + use_default_recipients: useDefaultRecipients, + default_groups: [], + default_recipients: [], + }) + }, + ) +}) diff --git a/src/types/requests.ts b/src/types/requests.ts index 5249d7f..24734ca 100644 --- a/src/types/requests.ts +++ b/src/types/requests.ts @@ -18,6 +18,7 @@ export const CreateChannelArgsSchema = z.object({ color: z.number().nullable().optional(), public: z.boolean().nullable().optional(), description: z.string().nullable().optional(), + useDefaultRecipients: z.boolean().nullable().optional(), defaultGroups: z.array(z.string()).nullable().optional(), defaultRecipients: z.array(z.number()).nullable().optional(), isFavorited: z.boolean().nullable().optional(), @@ -32,6 +33,7 @@ export const UpdateChannelArgsSchema = z.object({ color: z.number().nullable().optional(), public: z.boolean().nullable().optional(), description: z.string().nullable().optional(), + useDefaultRecipients: z.boolean().nullable().optional(), defaultGroups: z.array(z.string()).nullable().optional(), defaultRecipients: z.array(z.number()).nullable().optional(), isFavorited: z.boolean().nullable().optional(),