@@ -100,25 +100,41 @@ defmodule RealtimeWeb.RealtimeChannel.PresenceHandlerTest do
100
100
end
101
101
102
102
describe "handle/3" do
103
+ setup do
104
+ on_exit ( fn -> :telemetry . detach ( __MODULE__ ) end )
105
+
106
+ :telemetry . attach (
107
+ __MODULE__ ,
108
+ [ :realtime , :tenants , :payload , :size ] ,
109
+ & __MODULE__ . handle_telemetry / 4 ,
110
+ pid: self ( )
111
+ )
112
+ end
113
+
103
114
test "with true policy and is private, user can track their presence and changes" , % {
104
115
tenant: tenant ,
105
116
topic: topic ,
106
117
db_conn: db_conn
107
118
} do
119
+ external_id = tenant . external_id
108
120
key = random_string ( )
109
121
policies = % Policies { presence: % PresencePolicies { read: true , write: true } }
110
122
111
123
socket =
112
124
socket_fixture ( tenant , topic , key , policies: policies )
113
125
114
- PresenceHandler . handle ( % { "event" => "track" } , db_conn , socket )
126
+ PresenceHandler . handle ( % { "event" => "track" , "payload" => % { "A" => "b" , "c" => "b" } } , db_conn , socket )
115
127
topic = socket . assigns . tenant_topic
116
128
117
129
assert_receive % Broadcast { topic: ^ topic , event: "presence_diff" , payload: % { joins: joins , leaves: % { } } }
118
130
assert Map . has_key? ( joins , key )
131
+
132
+ assert_receive { :telemetry , [ :realtime , :tenants , :payload , :size ] , % { size: 30 } ,
133
+ % { tenant: ^ external_id , message_type: :presence } }
119
134
end
120
135
121
136
test "when tracking already existing user, metadata updated" , % { tenant: tenant , topic: topic , db_conn: db_conn } do
137
+ external_id = tenant . external_id
122
138
key = random_string ( )
123
139
policies = % Policies { presence: % PresencePolicies { read: true , write: true } }
124
140
socket = socket_fixture ( tenant , topic , key , policies: policies )
@@ -134,10 +150,18 @@ defmodule RealtimeWeb.RealtimeChannel.PresenceHandlerTest do
134
150
135
151
assert_receive % Broadcast { topic: ^ topic , event: "presence_diff" , payload: % { joins: joins , leaves: % { } } }
136
152
assert Map . has_key? ( joins , key )
153
+
154
+ assert_receive { :telemetry , [ :realtime , :tenants , :payload , :size ] , % { size: 6 } ,
155
+ % { tenant: ^ external_id , message_type: :presence } }
156
+
157
+ assert_receive { :telemetry , [ :realtime , :tenants , :payload , :size ] , % { size: 55 } ,
158
+ % { tenant: ^ external_id , message_type: :presence } }
159
+
137
160
refute_receive :_
138
161
end
139
162
140
163
test "with false policy and is public, user can track their presence and changes" , % { tenant: tenant , topic: topic } do
164
+ external_id = tenant . external_id
141
165
key = random_string ( )
142
166
policies = % Policies { presence: % PresencePolicies { read: false , write: false } }
143
167
socket = socket_fixture ( tenant , topic , key , policies: policies , private?: false )
@@ -147,6 +171,9 @@ defmodule RealtimeWeb.RealtimeChannel.PresenceHandlerTest do
147
171
topic = socket . assigns . tenant_topic
148
172
assert_receive % Broadcast { topic: ^ topic , event: "presence_diff" , payload: % { joins: joins , leaves: % { } } }
149
173
assert Map . has_key? ( joins , key )
174
+
175
+ assert_receive { :telemetry , [ :realtime , :tenants , :payload , :size ] , % { size: 6 } ,
176
+ % { tenant: ^ external_id , message_type: :presence } }
150
177
end
151
178
152
179
test "user can untrack when they want" , % { tenant: tenant , topic: topic , db_conn: db_conn } do
@@ -518,4 +545,6 @@ defmodule RealtimeWeb.RealtimeChannel.PresenceHandlerTest do
518
545
}
519
546
}
520
547
end
548
+
549
+ def handle_telemetry ( event , measures , metadata , pid: pid ) , do: send ( pid , { :telemetry , event , measures , metadata } )
521
550
end
0 commit comments