1+ using ByteSync . Common . Business . EndPoints ;
2+ using ByteSync . Common . Business . Sessions ;
3+ using ByteSync . ServerCommon . Business . Auth ;
4+ using ByteSync . ServerCommon . Business . Sessions ;
5+ using FluentAssertions ;
6+
7+ namespace ByteSync . ServerCommon . Tests . Business ;
8+
9+ [ TestFixture ]
10+ public class SessionMemberDataTests
11+ {
12+ private SessionMemberData _sessionMemberData ;
13+ private CloudSessionData _cloudSessionData ;
14+ private Client _client ;
15+ private PublicKeyInfo _publicKeyInfo ;
16+ private string _profileClientId ;
17+
18+ [ SetUp ]
19+ public void Setup ( )
20+ {
21+ _cloudSessionData = new CloudSessionData { SessionId = "session-123" } ;
22+ _client = new Client { ClientInstanceId = "client-123" , ClientId = "id-123" } ;
23+ _publicKeyInfo = new PublicKeyInfo { ClientId = "public-key-data" } ;
24+ _profileClientId = "profile-123" ;
25+ _sessionMemberData = new SessionMemberData ( ) ;
26+ }
27+
28+ [ Test ]
29+ public void DefaultConstructor_ShouldInitializeProperties ( )
30+ {
31+ // Assert
32+ _sessionMemberData . JoinedSessionOn . Should ( ) . BeCloseTo ( DateTimeOffset . UtcNow , TimeSpan . FromSeconds ( 1 ) ) ;
33+ _sessionMemberData . AuthCheckClientInstanceIds . Should ( ) . NotBeNull ( ) ;
34+ _sessionMemberData . AuthCheckClientInstanceIds . Should ( ) . BeEmpty ( ) ;
35+ }
36+
37+ [ Test ]
38+ public void ParameterizedConstructor_WithClient_ShouldInitializeProperties ( )
39+ {
40+ // Act
41+ var memberData = new SessionMemberData ( _client , _publicKeyInfo , _profileClientId , _cloudSessionData ) ;
42+
43+ // Assert
44+ memberData . ClientInstanceId . Should ( ) . Be ( _client . ClientInstanceId ) ;
45+ memberData . ClientId . Should ( ) . Be ( _client . ClientId ) ;
46+ memberData . PublicKeyInfo . Should ( ) . Be ( _publicKeyInfo ) ;
47+ memberData . ProfileClientId . Should ( ) . Be ( _profileClientId ) ;
48+ memberData . CloudSessionData . Should ( ) . Be ( _cloudSessionData ) ;
49+ memberData . JoinedSessionOn . Should ( ) . BeCloseTo ( DateTimeOffset . UtcNow , TimeSpan . FromSeconds ( 1 ) ) ;
50+ memberData . AuthCheckClientInstanceIds . Should ( ) . NotBeNull ( ) ;
51+ memberData . AuthCheckClientInstanceIds . Should ( ) . BeEmpty ( ) ;
52+ }
53+
54+ [ Test ]
55+ public void ParameterizedConstructor_WithStrings_ShouldInitializeProperties ( )
56+ {
57+ // Act
58+ var memberData = new SessionMemberData (
59+ "client-instance-456" ,
60+ "client-id-456" ,
61+ _publicKeyInfo ,
62+ _profileClientId ,
63+ _cloudSessionData ) ;
64+
65+ // Assert
66+ memberData . ClientInstanceId . Should ( ) . Be ( "client-instance-456" ) ;
67+ memberData . ClientId . Should ( ) . Be ( "client-id-456" ) ;
68+ memberData . PublicKeyInfo . Should ( ) . Be ( _publicKeyInfo ) ;
69+ memberData . ProfileClientId . Should ( ) . Be ( _profileClientId ) ;
70+ memberData . CloudSessionData . Should ( ) . Be ( _cloudSessionData ) ;
71+ memberData . JoinedSessionOn . Should ( ) . BeCloseTo ( DateTimeOffset . UtcNow , TimeSpan . FromSeconds ( 1 ) ) ;
72+ memberData . AuthCheckClientInstanceIds . Should ( ) . NotBeNull ( ) ;
73+ memberData . AuthCheckClientInstanceIds . Should ( ) . BeEmpty ( ) ;
74+ }
75+
76+ [ Test ]
77+ public void ParameterizedConstructor_WithEncryptedData_ShouldInitializeEncryptedData ( )
78+ {
79+ // Arrange
80+ var encryptedData = new EncryptedSessionMemberPrivateData ( ) ;
81+
82+ // Act
83+ var memberData = new SessionMemberData (
84+ _client ,
85+ _publicKeyInfo ,
86+ _profileClientId ,
87+ _cloudSessionData ,
88+ encryptedData ) ;
89+
90+ // Assert
91+ memberData . EncryptedPrivateData . Should ( ) . BeSameAs ( encryptedData ) ;
92+ }
93+
94+ [ Test ]
95+ public void PositionInList_WhenMemberExists_ShouldReturnCorrectIndex ( )
96+ {
97+ // Arrange
98+ _sessionMemberData . ClientInstanceId = "client-456" ;
99+ _sessionMemberData . CloudSessionData = _cloudSessionData ;
100+
101+ var firstMember = new SessionMemberData { ClientInstanceId = "client-123" } ;
102+ var secondMember = _sessionMemberData ;
103+ var thirdMember = new SessionMemberData { ClientInstanceId = "client-789" } ;
104+
105+ _cloudSessionData . SessionMembers . Add ( firstMember ) ;
106+ _cloudSessionData . SessionMembers . Add ( secondMember ) ;
107+ _cloudSessionData . SessionMembers . Add ( thirdMember ) ;
108+
109+ // Act
110+ var position = _sessionMemberData . PositionInList ;
111+
112+ // Assert
113+ position . Should ( ) . Be ( 1 ) ;
114+ }
115+
116+ [ Test ]
117+ public void PositionInList_WhenMemberNotInList_ShouldReturnMinusOne ( )
118+ {
119+ // Arrange
120+ _sessionMemberData . ClientInstanceId = "not-in-list" ;
121+ _sessionMemberData . CloudSessionData = _cloudSessionData ;
122+
123+ _cloudSessionData . SessionMembers . Add ( new SessionMemberData { ClientInstanceId = "client-123" } ) ;
124+ _cloudSessionData . SessionMembers . Add ( new SessionMemberData { ClientInstanceId = "client-456" } ) ;
125+
126+ // Act
127+ var position = _sessionMemberData . PositionInList ;
128+
129+ // Assert
130+ position . Should ( ) . Be ( - 1 ) ;
131+ }
132+
133+ [ Test ]
134+ public void Equals_WithSameClientInstanceId_ShouldReturnTrue ( )
135+ {
136+ // Arrange
137+ var firstMember = new SessionMemberData { ClientInstanceId = "same-id" } ;
138+ var secondMember = new SessionMemberData { ClientInstanceId = "same-id" } ;
139+
140+ // Act
141+ bool result = firstMember . Equals ( secondMember ) ;
142+
143+ // Assert
144+ result . Should ( ) . BeTrue ( ) ;
145+ }
146+
147+ [ Test ]
148+ public void Equals_WithDifferentClientInstanceId_ShouldReturnFalse ( )
149+ {
150+ // Arrange
151+ var firstMember = new SessionMemberData { ClientInstanceId = "first-id" } ;
152+ var secondMember = new SessionMemberData { ClientInstanceId = "second-id" } ;
153+
154+ // Act
155+ bool result = firstMember . Equals ( secondMember ) ;
156+
157+ // Assert
158+ result . Should ( ) . BeFalse ( ) ;
159+ }
160+
161+ [ Test ]
162+ public void Equals_WithNonSessionMemberDataObject_ShouldReturnFalse ( )
163+ {
164+ // Arrange
165+ var memberData = new SessionMemberData { ClientInstanceId = "member-id" } ;
166+ var otherObject = new object ( ) ;
167+
168+ // Act
169+ bool result = memberData . Equals ( otherObject ) ;
170+
171+ // Assert
172+ result . Should ( ) . BeFalse ( ) ;
173+ }
174+
175+ [ Test ]
176+ public void GetHashCode_WithSameClientInstanceId_ShouldReturnSameValue ( )
177+ {
178+ // Arrange
179+ var clientInstanceId = "same-id" ;
180+ var firstMember = new SessionMemberData { ClientInstanceId = clientInstanceId } ;
181+ var secondMember = new SessionMemberData { ClientInstanceId = clientInstanceId } ;
182+
183+ // Act
184+ var firstHash = firstMember . GetHashCode ( ) ;
185+ var secondHash = secondMember . GetHashCode ( ) ;
186+
187+ // Assert
188+ firstHash . Should ( ) . Be ( secondHash ) ;
189+ firstHash . Should ( ) . Be ( clientInstanceId . GetHashCode ( ) ) ;
190+ }
191+
192+ [ Test ]
193+ public void IsAuthCheckedFor_WhenInstanceIdInAuthCheckList_ShouldReturnTrue ( )
194+ {
195+ // Arrange
196+ _sessionMemberData . AuthCheckClientInstanceIds = new List < string > { "auth-checked-id" } ;
197+
198+ // Act
199+ bool result = _sessionMemberData . IsAuthCheckedFor ( "auth-checked-id" ) ;
200+
201+ // Assert
202+ result . Should ( ) . BeTrue ( ) ;
203+ }
204+
205+ [ Test ]
206+ public void IsAuthCheckedFor_WhenInstanceIdStartsWithClientId_ShouldReturnTrue ( )
207+ {
208+ // Arrange
209+ _sessionMemberData . ClientId = "client-prefix" ;
210+
211+ // Act
212+ bool result = _sessionMemberData . IsAuthCheckedFor ( "client-prefix-suffix" ) ;
213+
214+ // Assert
215+ result . Should ( ) . BeTrue ( ) ;
216+ }
217+
218+ [ Test ]
219+ public void IsAuthCheckedFor_WhenInstanceIdNotChecked_ShouldReturnFalse ( )
220+ {
221+ // Arrange
222+ _sessionMemberData . ClientId = "client-id" ;
223+ _sessionMemberData . AuthCheckClientInstanceIds = new List < string > { "other-id" } ;
224+
225+ // Act
226+ bool result = _sessionMemberData . IsAuthCheckedFor ( "unchecked-id" ) ;
227+
228+ // Assert
229+ result . Should ( ) . BeFalse ( ) ;
230+ }
231+ }
0 commit comments