11import Ably
22import AblyChat
33
4- final class MockRealtimePresence : RealtimePresenceProtocol {
5- var syncComplete : Bool {
6- fatalError ( " Not implemented " )
4+ final class MockRealtimePresence : NSObject , @unchecked Sendable , RealtimePresenceProtocol {
5+ let syncComplete : Bool
6+ private var members : [ ARTPresenceMessage ]
7+ private var currentMember : ARTPresenceMessage ?
8+ private var subscribeCallback : ARTPresenceMessageCallback ?
9+ private var presenceGetError : ARTErrorInfo ?
10+
11+ init ( syncComplete: Bool = true , members: [ ARTPresenceMessage ] , presenceGetError: ARTErrorInfo ? = nil ) {
12+ self . syncComplete = syncComplete
13+ self . members = members
14+ currentMember = members. count == 1 ? members [ 0 ] : nil
15+ self . presenceGetError = presenceGetError
716 }
817
9- func get( _: @escaping ARTPresenceMessagesCallback ) {
10- fatalError ( " Not implemented " )
18+ func get( _ callback : @escaping ARTPresenceMessagesCallback ) {
19+ callback ( presenceGetError == nil ? members : nil , presenceGetError )
1120 }
1221
13- func get( _: ARTRealtimePresenceQuery , callback _ : @escaping ARTPresenceMessagesCallback ) {
14- fatalError ( " Not implemented " )
22+ func get( _ query : ARTRealtimePresenceQuery , callback: @escaping ARTPresenceMessagesCallback ) {
23+ callback ( members . filter { $0 . clientId == query . clientId } , nil )
1524 }
1625
1726 func enter( _: Any ? ) {
@@ -22,68 +31,87 @@ final class MockRealtimePresence: RealtimePresenceProtocol {
2231 fatalError ( " Not implemented " )
2332 }
2433
25- func update( _: Any ? ) {
26- fatalError ( " Not implemented " )
34+ func update( _ data : Any ? ) {
35+ currentMember ? . data = data
2736 }
2837
29- func update( _: Any ? , callback _: ARTCallback ? = nil ) {
30- fatalError ( " Not implemented " )
38+ func update( _ data: Any ? , callback: ARTCallback ? = nil ) {
39+ currentMember? . data = data
40+ callback ? ( nil )
3141 }
3242
3343 func leave( _: Any ? ) {
34- fatalError ( " Not implemented " )
44+ members . removeAll { $0 . clientId == currentMember ? . clientId }
3545 }
3646
37- func leave( _: Any ? , callback _: ARTCallback ? = nil ) {
38- fatalError ( " Not implemented " )
47+ func leave( _: Any ? , callback: ARTCallback ? = nil ) {
48+ members. removeAll { $0. clientId == currentMember? . clientId }
49+ callback ? ( nil )
3950 }
4051
41- func enterClient( _: String , data _: Any ? ) {
42- fatalError ( " Not implemented " )
52+ func enterClient( _ clientId: String , data: Any ? ) {
53+ currentMember = ARTPresenceMessage ( clientId: clientId, data: data)
54+ members. append ( currentMember!)
55+ currentMember!. action = . enter
56+ subscribeCallback ? ( currentMember!)
4357 }
4458
45- func enterClient( _: String , data _: Any ? , callback _: ARTCallback ? = nil ) {
46- fatalError ( " Not implemented " )
59+ func enterClient( _ clientId: String , data: Any ? , callback: ARTCallback ? = nil ) {
60+ currentMember = ARTPresenceMessage ( clientId: clientId, data: data)
61+ members. append ( currentMember!)
62+ callback ? ( nil )
63+ currentMember!. action = . enter
64+ subscribeCallback ? ( currentMember!)
4765 }
4866
49- func updateClient( _: String , data _ : Any ? ) {
50- fatalError ( " Not implemented " )
67+ func updateClient( _ clientId : String , data: Any ? ) {
68+ members . first { $0 . clientId == clientId } ? . data = data
5169 }
5270
53- func updateClient( _: String , data _: Any ? , callback _: ARTCallback ? = nil ) {
54- fatalError ( " Not implemented " )
71+ func updateClient( _ clientId: String , data: Any ? , callback: ARTCallback ? = nil ) {
72+ guard let member = members. first ( where: { $0. clientId == clientId } ) else {
73+ preconditionFailure ( " Client \( clientId) doesn't exist in this presence set. " )
74+ }
75+ member. action = . update
76+ member. data = data
77+ subscribeCallback ? ( member)
78+ callback ? ( nil )
5579 }
5680
57- func leaveClient( _: String , data _: Any ? ) {
58- fatalError ( " Not implemented " )
81+ func leaveClient( _ clientId : String , data _: Any ? ) {
82+ members . removeAll { $0 . clientId == clientId }
5983 }
6084
61- func leaveClient( _: String , data _: Any ? , callback _: ARTCallback ? = nil ) {
62- fatalError ( " Not implemented " )
85+ func leaveClient( _ clientId : String , data _: Any ? , callback _: ARTCallback ? = nil ) {
86+ members . removeAll { $0 . clientId == clientId }
6387 }
6488
65- func subscribe( _: @escaping ARTPresenceMessageCallback ) -> ARTEventListener ? {
66- fatalError ( " Not implemented " )
89+ func subscribe( _ callback: @escaping ARTPresenceMessageCallback ) -> ARTEventListener ? {
90+ subscribeCallback = callback
91+ for member in members {
92+ subscribeCallback ? ( member)
93+ }
94+ return ARTEventListener ( )
6795 }
6896
6997 func subscribe( attachCallback _: ARTCallback ? , callback _: @escaping ARTPresenceMessageCallback ) -> ARTEventListener ? {
70- fatalError ( " Not implemented " )
98+ ARTEventListener ( )
7199 }
72100
73101 func subscribe( _: ARTPresenceAction , callback _: @escaping ARTPresenceMessageCallback ) -> ARTEventListener ? {
74- fatalError ( " Not implemented " )
102+ ARTEventListener ( )
75103 }
76104
77105 func subscribe( _: ARTPresenceAction , onAttach _: ARTCallback ? , callback _: @escaping ARTPresenceMessageCallback ) -> ARTEventListener ? {
78- fatalError ( " Not implemented " )
106+ ARTEventListener ( )
79107 }
80108
81109 func unsubscribe( ) {
82110 fatalError ( " Not implemented " )
83111 }
84112
85113 func unsubscribe( _: ARTEventListener ) {
86- fatalError ( " Not implemented " )
114+ subscribeCallback = nil
87115 }
88116
89117 func unsubscribe( _: ARTPresenceAction , listener _: ARTEventListener ) {
0 commit comments