@@ -47,6 +47,101 @@ class ParticipantPermissionsTest : TestCase() {
4747 assertTrue(attendeePermissions.canPublishVideo())
4848 }
4949
50+ @Test
51+ fun test_reactPermissionWithReactCapability () {
52+ val spreedCapability = SpreedCapability ()
53+ // Server with react-permission also supports chat-permission
54+ spreedCapability.features = listOf (" chat-permission" , " react-permission" )
55+ val conversation = createConversation()
56+
57+ // With react-permission capability, only REACT bit matters
58+ conversation.permissions = ParticipantPermissions .REACT or
59+ ParticipantPermissions .CUSTOM
60+
61+ val user = User ()
62+ user.id = 1
63+
64+ val attendeePermissions =
65+ ParticipantPermissions (
66+ spreedCapability,
67+ ConversationModel .mapToConversationModel(conversation, user)
68+ )
69+
70+ assertTrue(attendeePermissions.hasReactPermission())
71+ assertFalse(attendeePermissions.hasChatPermission())
72+ }
73+
74+ @Test
75+ fun test_reactPermissionDeniedWithReactCapability () {
76+ val spreedCapability = SpreedCapability ()
77+ // Server with react-permission also supports chat-permission
78+ spreedCapability.features = listOf (" chat-permission" , " react-permission" )
79+ val conversation = createConversation()
80+
81+ // With react-permission capability, only CHAT but no REACT - should NOT allow reactions
82+ conversation.permissions = ParticipantPermissions .CHAT or
83+ ParticipantPermissions .CUSTOM
84+
85+ val user = User ()
86+ user.id = 1
87+
88+ val attendeePermissions =
89+ ParticipantPermissions (
90+ spreedCapability,
91+ ConversationModel .mapToConversationModel(conversation, user)
92+ )
93+
94+ assertFalse(attendeePermissions.hasReactPermission())
95+ assertTrue(attendeePermissions.hasChatPermission())
96+ }
97+
98+ @Test
99+ fun test_reactPermissionFallbackToChatOnOlderServer () {
100+ val spreedCapability = SpreedCapability ()
101+ // Older server without react-permission capability but with chat-permission
102+ spreedCapability.features = listOf (" chat-permission" )
103+ val conversation = createConversation()
104+
105+ // Only CHAT permission set - should allow reactions as fallback for older servers
106+ conversation.permissions = ParticipantPermissions .CHAT or
107+ ParticipantPermissions .CUSTOM
108+
109+ val user = User ()
110+ user.id = 1
111+
112+ val attendeePermissions =
113+ ParticipantPermissions (
114+ spreedCapability,
115+ ConversationModel .mapToConversationModel(conversation, user)
116+ )
117+
118+ assertTrue(attendeePermissions.hasReactPermission())
119+ assertTrue(attendeePermissions.hasChatPermission())
120+ }
121+
122+ @Test
123+ fun test_reactPermissionDeniedOnOlderServerWithoutChatPermission () {
124+ val spreedCapability = SpreedCapability ()
125+ // Older server without react-permission capability but with chat-permission
126+ spreedCapability.features = listOf (" chat-permission" )
127+ val conversation = createConversation()
128+
129+ // No CHAT permission - should deny reactions on older servers
130+ conversation.permissions = ParticipantPermissions .CUSTOM
131+
132+ val user = User ()
133+ user.id = 1
134+
135+ val attendeePermissions =
136+ ParticipantPermissions (
137+ spreedCapability,
138+ ConversationModel .mapToConversationModel(conversation, user)
139+ )
140+
141+ assertFalse(attendeePermissions.hasReactPermission())
142+ assertFalse(attendeePermissions.hasChatPermission())
143+ }
144+
50145 private fun createConversation () =
51146 Conversation (
52147 token = " test" ,
0 commit comments