Skip to content

Commit eb6c88c

Browse files
committed
Added member to message response
1 parent dbfb314 commit eb6c88c

File tree

2 files changed

+92
-0
lines changed

2 files changed

+92
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import 'dotenv/config';
2+
import { beforeAll, afterAll, describe, it, expect } from 'vitest';
3+
import { v4 as uuidv4 } from 'uuid';
4+
5+
import { createTestClient } from './create-test-client';
6+
import { StreamClient } from '../src/StreamClient';
7+
import { StreamChannel } from '../src/StreamChannel';
8+
9+
10+
describe('member message role propagation', () => {
11+
let client: StreamClient;
12+
let channel: StreamChannel;
13+
const channelId = 'streamnodetest-role-' + uuidv4();
14+
15+
const user1 = {
16+
id: 'stream-node-role-user1-' + uuidv4(),
17+
name: 'Stream Node Role User 1',
18+
role: 'custom_role',
19+
};
20+
21+
const user2 = {
22+
id: 'stream-node-role-user2-' + uuidv4(),
23+
name: 'Stream Node Role User 2',
24+
role: 'user',
25+
};
26+
27+
let messageId1: string | undefined;
28+
let messageId2: string | undefined;
29+
30+
beforeAll(async () => {
31+
client = createTestClient();
32+
33+
// upsert both users with their roles
34+
await client.upsertUsers([user1, user2]);
35+
36+
// create channel with both members
37+
channel = client.chat.channel('messaging', channelId);
38+
39+
await channel.getOrCreate({
40+
data: {
41+
created_by: { id: user1.id },
42+
members: [{ user: user1 }, { user: user2 }],
43+
},
44+
});
45+
});
46+
47+
it('should include the creator role in message response', async () => {
48+
// user1 sends a message
49+
const resp1 = await channel.sendMessage({
50+
message: {
51+
text: 'Message from user1',
52+
user_id: user1.id,
53+
},
54+
});
55+
56+
messageId1 = resp1.message.id;
57+
58+
expect(resp1.message?.user?.id).toBe(user1.id);
59+
expect(resp1.message?.user?.role).toBe(user1.role);
60+
61+
// user2 sends a message
62+
const resp2 = await channel.sendMessage({
63+
message: {
64+
text: 'Message from user2',
65+
user_id: user2.id,
66+
},
67+
});
68+
69+
messageId2 = resp2.message.id;
70+
71+
expect(resp2.message?.user?.id).toBe(user2.id);
72+
expect(resp2.message?.user?.role).toBe(user2.role);
73+
});
74+
75+
it('channel state messages should include creator role', async () => {
76+
const state = await channel.getOrCreate();
77+
78+
// Ensure both messages are present with correct roles.
79+
const msg1 = state.messages.find((m) => m.id === messageId1);
80+
const msg2 = state.messages.find((m) => m.id === messageId2);
81+
82+
expect(msg1?.user?.role).toBe(user1.role);
83+
expect(msg2?.user?.role).toBe(user2.role);
84+
});
85+
86+
afterAll(async () => {
87+
// Clean up the channel after test run
88+
await channel.delete({ hard_delete: true });
89+
});
90+
});

src/gen/models/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7487,6 +7487,8 @@ export interface MessageResponse {
74877487
reminder?: ReminderResponseData;
74887488

74897489
shared_location?: SharedLocationResponseData;
7490+
7491+
member?: ChannelMemberResponse;
74907492
}
74917493

74927494
export interface MessageStatsResponse {

0 commit comments

Comments
 (0)