1+ package realtime .pubsub ;
2+
3+ import org .junit .jupiter .api .Test ;
4+
5+ import java .util .*;
6+
7+ import static org .junit .jupiter .api .Assertions .*;
8+
9+ /**
10+ * Unit tests for the PresenceMessage class.
11+ */
12+ public class PresenceMessageTest {
13+
14+ @ Test
15+ public void testGetConnectionId_ValidData () {
16+ // Arrange
17+ PresenceMessage presenceMessage =
createPresenceMessage (
"conn123" ,
"[email protected] " ,
Arrays .
asList (
"read" ,
"write" ),
"connected" );
18+
19+ // Act
20+ String connectionId = presenceMessage .getConnectionId ();
21+
22+ // Assert
23+ assertEquals ("conn123" , connectionId );
24+ }
25+
26+ @ Test
27+ public void testGetConnectionId_MissingData () {
28+ // Act & Assert
29+ Exception exception = assertThrows (IllegalArgumentException .class , () -> {
30+ createPresenceMessage (
null ,
"[email protected] " ,
Arrays .
asList (
"read" ,
"write" ),
"connected" );
31+ });
32+ assertEquals ("client.connectionId must be a String" , exception .getMessage ());
33+ }
34+
35+ @ Test
36+ public void testGetSubject_ValidData () {
37+ // Arrange
38+ PresenceMessage presenceMessage =
createPresenceMessage (
"conn123" ,
"[email protected] " ,
Arrays .
asList (
"read" ,
"write" ),
"connected" );
39+
40+ // Act
41+ String subject = presenceMessage .getSubject ();
42+
43+ // Assert
44+ assertEquals (
"[email protected] " ,
subject );
45+ }
46+
47+ @ Test
48+ public void testGetSubject_MissingData () {
49+ // Act & Assert
50+ Exception exception = assertThrows (IllegalArgumentException .class , () -> {
51+ createPresenceMessage ("conn123" , null , Arrays .asList ("read" , "write" ), "connected" );
52+ });
53+ assertEquals ("client.subject must be a String" , exception .getMessage ());
54+ }
55+
56+ @ Test
57+ public void testGetPermissions_ValidData () {
58+ // Arrange
59+ PresenceMessage presenceMessage =
createPresenceMessage (
"conn123" ,
"[email protected] " ,
Arrays .
asList (
"read" ,
"write" ),
"connected" );
60+
61+ // Act
62+ List <String > permissions = presenceMessage .getPermissions ();
63+
64+ // Assert
65+ assertEquals (Arrays .asList ("read" , "write" ), permissions );
66+ }
67+
68+ @ Test
69+ public void testGetPermissions_MissingData () {
70+ // Arrange
71+ PresenceMessage presenceMessage =
createPresenceMessage (
"conn123" ,
"[email protected] " ,
null ,
"connected" );
72+
73+ // Act
74+ List <String > permissions = presenceMessage .getPermissions ();
75+
76+ // Assert
77+ assertNull (permissions );
78+ }
79+
80+ @ Test
81+ public void testGetStatus_ValidData () {
82+ // Arrange
83+ PresenceMessage presenceMessage =
createPresenceMessage (
"conn123" ,
"[email protected] " ,
Arrays .
asList (
"read" ,
"write" ),
"connected" );
84+
85+ // Act
86+ PresenceStatus status = presenceMessage .getStatus ();
87+
88+ // Assert
89+ assertEquals (PresenceStatus .CONNECTED , status );
90+ }
91+
92+ @ Test
93+ public void testGetStatus_InvalidStatus () {
94+ // Act & Assert
95+ Exception exception = assertThrows (IllegalArgumentException .class , () -> {
96+ createPresenceMessage (
"conn123" ,
"[email protected] " ,
Arrays .
asList (
"read" ,
"write" ),
"UNKNOWN_STATUS" );
97+ });
98+ assertEquals ("Unknown status: UNKNOWN_STATUS" , exception .getMessage ());
99+ }
100+
101+ @ Test
102+ public void testFrom_NullIncomingMessage () {
103+ // Act & Assert
104+ assertThrows (NullPointerException .class , () -> PresenceMessage .from (null ));
105+ }
106+
107+ // Helper method to create a PresenceMessage instance with provided data
108+ private PresenceMessage createPresenceMessage (String connectionId , String subject , List <String > permissions , String status ) {
109+ // Build client map
110+ Map <String , Object > clientMap = new HashMap <>();
111+ if (connectionId != null ) {
112+ clientMap .put ("connectionId" , connectionId );
113+ }
114+ if (subject != null ) {
115+ clientMap .put ("subject" , subject );
116+ }
117+ if (permissions != null ) {
118+ clientMap .put ("permissions" , permissions );
119+ }
120+
121+ // Build payload map
122+ Map <String , Object > payloadMap = new HashMap <>();
123+ if (status != null ) {
124+ payloadMap .put ("status" , status );
125+ }
126+
127+ // Build data map
128+ Map <String , Object > dataMap = new HashMap <>();
129+ dataMap .put ("client" , clientMap );
130+ dataMap .put ("payload" , payloadMap );
131+
132+ // Build message map
133+ Map <String , Object > messageMap = new HashMap <>();
134+ messageMap .put ("topic" , "presence" );
135+ messageMap .put ("messageType" , "presence.status" );
136+ messageMap .put ("compression" , false );
137+ messageMap .put ("data" , dataMap );
138+
139+ // Create IncomingMessage
140+ IncomingMessage incomingMessage = IncomingMessage .from (messageMap );
141+
142+ // Create and return PresenceMessage
143+ return PresenceMessage .from (incomingMessage );
144+ }
145+ }
0 commit comments