@@ -98,7 +98,7 @@ mod test {
98
98
use super :: * ;
99
99
use primitives:: {
100
100
sentry:: Analytics ,
101
- util:: tests:: prep_db:: { ADDRESSES , DUMMY_CAMPAIGN } ,
101
+ util:: tests:: prep_db:: { ADDRESSES , DUMMY_CAMPAIGN , DUMMY_IPFS } ,
102
102
UnifiedNum ,
103
103
} ;
104
104
@@ -152,76 +152,222 @@ mod test {
152
152
UnifiedNum :: from_u64( 1_000_000 ) ,
153
153
) ,
154
154
) ,
155
+ (
156
+ "click_with_unit_and_slot" . into( ) ,
157
+ (
158
+ Event :: Click {
159
+ publisher: ADDRESSES [ "publisher" ] ,
160
+ ad_unit: Some ( DUMMY_IPFS [ 0 ] ) ,
161
+ ad_slot: Some ( DUMMY_IPFS [ 1 ] ) ,
162
+ referrer: Some ( "http://127.0.0.1" . into( ) ) ,
163
+ } ,
164
+ ADDRESSES [ "publisher" ] ,
165
+ UnifiedNum :: from_u64( 1_000_000 ) ,
166
+ ) ,
167
+ ) ,
168
+ (
169
+ "click_with_different_data" . into( ) ,
170
+ (
171
+ Event :: Click {
172
+ publisher: ADDRESSES [ "publisher" ] ,
173
+ ad_unit: Some ( DUMMY_IPFS [ 2 ] ) ,
174
+ ad_slot: Some ( DUMMY_IPFS [ 3 ] ) ,
175
+ referrer: Some ( "http://127.0.0.1" . into( ) ) ,
176
+ } ,
177
+ ADDRESSES [ "publisher" ] ,
178
+ UnifiedNum :: from_u64( 1_000_000 ) ,
179
+ ) ,
180
+ ) ,
181
+ (
182
+ "impression_with_slot_unit_and_referrer" . into( ) ,
183
+ (
184
+ Event :: Impression {
185
+ publisher: ADDRESSES [ "publisher" ] ,
186
+ ad_unit: Some ( DUMMY_IPFS [ 0 ] ) ,
187
+ ad_slot: Some ( DUMMY_IPFS [ 1 ] ) ,
188
+ referrer: Some ( "http://127.0.0.1" . into( ) ) ,
189
+ } ,
190
+ ADDRESSES [ "publisher" ] ,
191
+ UnifiedNum :: from_u64( 1_000_000 ) ,
192
+ ) ,
193
+ ) ,
155
194
]
156
195
. into_iter ( )
157
196
. collect :: < HashMap < String , _ > > ( ) ;
158
197
159
198
let campaign = DUMMY_CAMPAIGN . clone ( ) ;
160
- let session = Session {
161
- ip : None ,
162
- country : None ,
163
- referrer_header : None ,
164
- os : None ,
165
- } ;
166
199
167
- let input_events = vec ! [
168
- test_events[ "click_empty" ] . clone( ) ,
169
- test_events[ "impression_empty" ] . clone( ) ,
170
- ] ;
200
+ // Testing record with empty events and session
201
+ {
202
+ let session = Session {
203
+ ip : None ,
204
+ country : None ,
205
+ referrer_header : None ,
206
+ os : None ,
207
+ } ;
171
208
172
- record ( & database. clone ( ) , & campaign, & session, input_events. clone ( ) )
173
- . await
174
- . expect ( "should record" ) ;
209
+ let input_events = vec ! [
210
+ test_events[ "click_empty" ] . clone( ) ,
211
+ test_events[ "impression_empty" ] . clone( ) ,
212
+ ] ;
175
213
176
- let analytics = get_all_analytics ( & database. pool )
177
- . await
178
- . expect ( "should get all analytics" ) ;
179
-
180
- let click_analytics = analytics
181
- . iter ( )
182
- . find ( |a| a. event_type == "CLICK" )
183
- . expect ( "There should be a click Analytics" ) ;
184
- let impression_analytics = analytics
185
- . iter ( )
186
- . find ( |a| a. event_type == "IMPRESSION" )
187
- . expect ( "There should be an impression Analytics" ) ;
188
- assert_eq ! (
189
- click_analytics. payout_amount,
190
- UnifiedNum :: from_u64( 1_000_000 )
191
- ) ;
192
- assert_eq ! ( click_analytics. payout_count, 1 ) ;
193
-
194
- assert_eq ! (
195
- impression_analytics. payout_amount,
196
- UnifiedNum :: from_u64( 1_000_000 )
197
- ) ;
198
- assert_eq ! ( impression_analytics. payout_count, 1 ) ;
199
-
200
- record ( & database. clone ( ) , & campaign, & session, input_events)
214
+ record ( & database. clone ( ) , & campaign, & session, input_events. clone ( ) )
215
+ . await
216
+ . expect ( "should record" ) ;
217
+
218
+ let analytics = get_all_analytics ( & database. pool )
219
+ . await
220
+ . expect ( "should get all analytics" ) ;
221
+
222
+ let click_analytics = analytics
223
+ . iter ( )
224
+ . find ( |a| a. event_type == "CLICK" )
225
+ . expect ( "There should be a click Analytics" ) ;
226
+ let impression_analytics = analytics
227
+ . iter ( )
228
+ . find ( |a| a. event_type == "IMPRESSION" )
229
+ . expect ( "There should be an impression Analytics" ) ;
230
+ assert_eq ! (
231
+ click_analytics. payout_amount,
232
+ UnifiedNum :: from_u64( 1_000_000 )
233
+ ) ;
234
+ assert_eq ! ( click_analytics. payout_count, 1 ) ;
235
+
236
+ assert_eq ! (
237
+ impression_analytics. payout_amount,
238
+ UnifiedNum :: from_u64( 1_000_000 )
239
+ ) ;
240
+ assert_eq ! ( impression_analytics. payout_count, 1 ) ;
241
+
242
+ record ( & database. clone ( ) , & campaign, & session, input_events)
243
+ . await
244
+ . expect ( "should record" ) ;
245
+
246
+ let analytics = get_all_analytics ( & database. pool )
247
+ . await
248
+ . expect ( "should find analytics" ) ;
249
+ let click_analytics = analytics
250
+ . iter ( )
251
+ . find ( |a| a. event_type == "CLICK" )
252
+ . expect ( "There should be a click event" ) ;
253
+ let impression_analytics = analytics
254
+ . iter ( )
255
+ . find ( |a| a. event_type == "IMPRESSION" )
256
+ . expect ( "There should be an impression event" ) ;
257
+ assert_eq ! (
258
+ click_analytics. payout_amount,
259
+ UnifiedNum :: from_u64( 2_000_000 )
260
+ ) ;
261
+ assert_eq ! ( click_analytics. payout_count, 2 ) ;
262
+
263
+ assert_eq ! (
264
+ impression_analytics. payout_amount,
265
+ UnifiedNum :: from_u64( 2_000_000 )
266
+ ) ;
267
+ assert_eq ! ( impression_analytics. payout_count, 2 ) ;
268
+ }
269
+
270
+ // Testing record with non-empty events and non-empty session
271
+ {
272
+ let session = Session {
273
+ ip : Default :: default ( ) ,
274
+ country : Some ( "Bulgaria" . into ( ) ) ,
275
+ referrer_header : Some ( "http://127.0.0.1" . into ( ) ) ,
276
+ os : Some ( "Windows" . into ( ) ) ,
277
+ } ;
278
+
279
+ let other_session = Session {
280
+ ip : Default :: default ( ) ,
281
+ country : Some ( "Japan" . into ( ) ) ,
282
+ referrer_header : Some ( "http://127.0.0.1" . into ( ) ) ,
283
+ os : Some ( "Android" . into ( ) ) ,
284
+ } ;
285
+
286
+ let input_events = vec ! [
287
+ test_events[ "click_with_unit_and_slot" ] . clone( ) ,
288
+ test_events[ "click_with_different_data" ] . clone( ) ,
289
+ test_events[ "impression_with_slot_unit_and_referrer" ] . clone( ) ,
290
+ ] ;
291
+
292
+ record ( & database. clone ( ) , & campaign, & session, input_events. clone ( ) )
293
+ . await
294
+ . expect ( "should record" ) ;
295
+
296
+ let analytics = get_all_analytics ( & database. pool )
297
+ . await
298
+ . expect ( "should get all analytics" ) ;
299
+
300
+ assert_eq ! ( analytics. len( ) , 5 ) ;
301
+
302
+ let with_slot_and_unit: Vec < Analytics > = analytics
303
+ . clone ( )
304
+ . into_iter ( )
305
+ . filter ( |a| a. ad_unit == Some ( DUMMY_IPFS [ 0 ] ) && a. ad_slot == Some ( DUMMY_IPFS [ 1 ] ) )
306
+ . collect ( ) ;
307
+ assert_eq ! ( with_slot_and_unit. len( ) , 2 ) ;
308
+
309
+ let with_different_slot_and_unit: Vec < Analytics > = analytics
310
+ . clone ( )
311
+ . into_iter ( )
312
+ . filter ( |a| a. ad_unit == Some ( DUMMY_IPFS [ 2 ] ) && a. ad_slot == Some ( DUMMY_IPFS [ 3 ] ) )
313
+ . collect ( ) ;
314
+ assert_eq ! ( with_different_slot_and_unit. len( ) , 1 ) ;
315
+
316
+ record (
317
+ & database. clone ( ) ,
318
+ & campaign,
319
+ & other_session,
320
+ input_events. clone ( ) ,
321
+ )
201
322
. await
202
323
. expect ( "should record" ) ;
324
+ let analytics = get_all_analytics ( & database. pool )
325
+ . await
326
+ . expect ( "should get all analytics" ) ;
203
327
204
- let analytics = get_all_analytics ( & database. pool )
205
- . await
206
- . expect ( "should find analytics" ) ;
207
- let click_analytics = analytics
208
- . iter ( )
209
- . find ( |a| a. event_type == "CLICK" )
210
- . expect ( "There should be a click event" ) ;
211
- let impression_analytics = analytics
212
- . iter ( )
213
- . find ( |a| a. event_type == "IMPRESSION" )
214
- . expect ( "There should be an impression event" ) ;
215
- assert_eq ! (
216
- click_analytics. payout_amount,
217
- UnifiedNum :: from_u64( 2_000_000 )
218
- ) ;
219
- assert_eq ! ( click_analytics. payout_count, 2 ) ;
220
-
221
- assert_eq ! (
222
- impression_analytics. payout_amount,
223
- UnifiedNum :: from_u64( 2_000_000 )
224
- ) ;
225
- assert_eq ! ( impression_analytics. payout_count, 2 ) ;
328
+ assert_eq ! ( analytics. len( ) , 8 ) ;
329
+
330
+ let with_slot_and_unit: Vec < Analytics > = analytics
331
+ . clone ( )
332
+ . into_iter ( )
333
+ . filter ( |a| a. ad_unit == Some ( DUMMY_IPFS [ 0 ] ) )
334
+ . collect ( ) ;
335
+ assert_eq ! ( with_slot_and_unit. len( ) , 4 ) ;
336
+
337
+ let with_different_slot_and_unit: Vec < Analytics > = analytics
338
+ . clone ( )
339
+ . into_iter ( )
340
+ . filter ( |a| a. ad_unit == Some ( DUMMY_IPFS [ 2 ] ) && a. ad_slot == Some ( DUMMY_IPFS [ 3 ] ) )
341
+ . collect ( ) ;
342
+ assert_eq ! ( with_different_slot_and_unit. len( ) , 2 ) ;
343
+
344
+ let with_country: Vec < Analytics > = analytics
345
+ . clone ( )
346
+ . into_iter ( )
347
+ . filter ( |a| a. country == Some ( "Bulgaria" . into ( ) ) )
348
+ . collect ( ) ;
349
+ assert_eq ! ( with_country. len( ) , 3 ) ;
350
+
351
+ let with_other_country: Vec < Analytics > = analytics
352
+ . clone ( )
353
+ . into_iter ( )
354
+ . filter ( |a| a. country == Some ( "Japan" . into ( ) ) )
355
+ . collect ( ) ;
356
+ assert_eq ! ( with_other_country. len( ) , 3 ) ;
357
+
358
+ let with_os: Vec < Analytics > = analytics
359
+ . clone ( )
360
+ . into_iter ( )
361
+ . filter ( |a| a. os_name == OperatingSystem :: map_os ( "Windows" ) )
362
+ . collect ( ) ;
363
+ assert_eq ! ( with_os. len( ) , 3 ) ;
364
+
365
+ let with_other_os: Vec < Analytics > = analytics
366
+ . clone ( )
367
+ . into_iter ( )
368
+ . filter ( |a| a. os_name == OperatingSystem :: map_os ( "Android" ) )
369
+ . collect ( ) ;
370
+ assert_eq ! ( with_other_os. len( ) , 3 ) ;
371
+ }
226
372
}
227
373
}
0 commit comments