@@ -402,4 +402,66 @@ mod tests {
402
402
assert_eq ! ( badge_award. kind, Kind :: BadgeAward ) ;
403
403
assert_eq ! ( badge_award. tags, example_event. tags) ;
404
404
}
405
+
406
+ #[ test]
407
+ fn test_profile_badges ( ) {
408
+ let keys = Keys :: generate ( ) ;
409
+ let pub_key = keys. public_key ( ) ;
410
+
411
+ let relay_url = UncheckedUrl :: from_str ( "wss://relay" ) . unwrap ( ) ;
412
+
413
+ let awarded_pub_keys = vec ! [
414
+ Tag :: PubKey ( pub_key. clone( ) , Some ( relay_url. clone( ) ) ) ,
415
+ Tag :: PubKey ( pub_key. clone( ) , Some ( relay_url. clone( ) ) ) ,
416
+ ] ;
417
+ let bravery_badge_event = get_badge_with_id_only ( "bravery" . to_owned ( ) , & keys) . 0 ;
418
+ let bravery_badge_award =
419
+ BadgeAward :: new ( & bravery_badge_event, awarded_pub_keys. clone ( ) , & keys)
420
+ . unwrap ( )
421
+ . 0 ;
422
+
423
+ let honor_badge_event = get_badge_with_id_only ( "honor" . to_owned ( ) , & keys) . 0 ;
424
+ let honor_badge_award = BadgeAward :: new ( & honor_badge_event, awarded_pub_keys, & keys)
425
+ . unwrap ( )
426
+ . 0 ;
427
+ let badge_definitions = vec ! [ bravery_badge_event, honor_badge_event] ;
428
+
429
+ let badge_awards = vec ! [ bravery_badge_award. clone( ) , honor_badge_award. clone( ) ] ;
430
+
431
+ let ( bravery_badge_award_event_id, honor_badge_award_event_id) =
432
+ ( bravery_badge_award. id , honor_badge_award. id ) ;
433
+ let example_event_json = format ! (
434
+ r#"{{
435
+ "content":"",
436
+ "id": "378f145897eea948952674269945e88612420db35791784abf0616b4fed56ef7",
437
+ "kind": 30008,
438
+ "pubkey": "{}",
439
+ "sig":"fd0954de564cae9923c2d8ee9ab2bf35bc19757f8e328a978958a2fcc950eaba0754148a203adec29b7b64080d0cf5a32bebedd768ea6eb421a6b751bb4584a8",
440
+ "created_at":1671739153,
441
+ "tags":[
442
+ ["d", "profile_badges"],
443
+ ["a", "30009:{}:bravery"],
444
+ ["e", "{}", "wss://relay"],
445
+ ["a", "30009:{}:honor"],
446
+ ["e", "{}", "wss://relay"]]
447
+ }}"# ,
448
+ pub_key. to_string( ) ,
449
+ pub_key. to_string( ) ,
450
+ bravery_badge_award_event_id. to_string( ) ,
451
+ pub_key. to_string( ) ,
452
+ honor_badge_award_event_id. to_string( ) ,
453
+ ) ;
454
+ let example_event: Event = serde_json:: from_str ( & example_event_json) . unwrap ( ) ;
455
+
456
+ assert_eq ! ( badge_awards. len( ) , 2 ) ;
457
+ assert_eq ! ( badge_definitions. len( ) , 2 ) ;
458
+
459
+ let profile_badges =
460
+ ProfileBadgesEvent :: new ( badge_definitions, badge_awards, & pub_key, & keys)
461
+ . unwrap ( )
462
+ . 0 ;
463
+
464
+ assert_eq ! ( profile_badges. kind, Kind :: ProfileBadges ) ;
465
+ assert_eq ! ( profile_badges. tags, example_event. tags) ;
466
+ }
405
467
}
0 commit comments