@@ -395,6 +395,7 @@ impl Default for DataQuery {
395395#[ cfg( test) ]
396396mod tests {
397397 use super :: * ;
398+ use serde_json:: json;
398399
399400 #[ test]
400401 fn test_data_key_spec ( ) {
@@ -410,6 +411,37 @@ mod tests {
410411 assert_eq ! ( spec. ttl_blocks, 100 ) ;
411412 }
412413
414+ #[ test]
415+ fn test_challenge_scoped ( ) {
416+ let spec = DataKeySpec :: new ( "leaderboard" ) . challenge_scoped ( ) ;
417+ assert_eq ! ( spec. scope, DataScope :: Challenge ) ;
418+ }
419+
420+ #[ test]
421+ fn test_global_scoped ( ) {
422+ let spec = DataKeySpec :: new ( "global_config" ) . global_scoped ( ) ;
423+ assert_eq ! ( spec. scope, DataScope :: Global ) ;
424+ }
425+
426+ #[ test]
427+ fn test_with_schema ( ) {
428+ let schema = json ! ( { "type" : "number" , "minimum" : 0 } ) ;
429+ let spec = DataKeySpec :: new ( "score" ) . with_schema ( schema. clone ( ) ) ;
430+ assert_eq ! ( spec. schema, Some ( schema) ) ;
431+ }
432+
433+ #[ test]
434+ fn test_no_consensus ( ) {
435+ let spec = DataKeySpec :: new ( "local_data" ) . no_consensus ( ) ;
436+ assert ! ( !spec. requires_consensus) ;
437+ }
438+
439+ #[ test]
440+ fn test_min_consensus ( ) {
441+ let spec = DataKeySpec :: new ( "important_data" ) . min_consensus ( 5 ) ;
442+ assert_eq ! ( spec. min_consensus, 5 ) ;
443+ }
444+
413445 #[ test]
414446 fn test_data_verification ( ) {
415447 let accept = DataVerification :: accept ( ) ;
@@ -420,6 +452,35 @@ mod tests {
420452 assert_eq ! ( reject. reason, Some ( "Bad data" . to_string( ) ) ) ;
421453 }
422454
455+ #[ test]
456+ fn test_accept_with_transform ( ) {
457+ let transformed = vec ! [ 4 , 5 , 6 ] ;
458+ let verification = DataVerification :: accept_with_transform ( transformed. clone ( ) ) ;
459+ assert ! ( verification. accepted) ;
460+ assert_eq ! ( verification. transformed_value, Some ( transformed) ) ;
461+ }
462+
463+ #[ test]
464+ fn test_with_ttl ( ) {
465+ let verification = DataVerification :: accept ( ) . with_ttl ( 500 ) ;
466+ assert_eq ! ( verification. ttl_override, Some ( 500 ) ) ;
467+ }
468+
469+ #[ test]
470+ fn test_with_event ( ) {
471+ let event = DataEvent :: new ( "update" , json ! ( { "key" : "value" } ) ) ;
472+ let verification = DataVerification :: accept ( ) . with_event ( event. clone ( ) ) ;
473+ assert_eq ! ( verification. events. len( ) , 1 ) ;
474+ assert_eq ! ( verification. events[ 0 ] . event_type, "update" ) ;
475+ }
476+
477+ #[ test]
478+ fn test_data_event_new ( ) {
479+ let event = DataEvent :: new ( "test_event" , json ! ( { "data" : 123 } ) ) ;
480+ assert_eq ! ( event. event_type, "test_event" ) ;
481+ assert_eq ! ( event. data, json!( { "data" : 123 } ) ) ;
482+ }
483+
423484 #[ test]
424485 fn test_data_submission ( ) {
425486 let sub = DataSubmission :: new ( "score" , vec ! [ 1 , 2 , 3 ] , "validator1" )
@@ -430,4 +491,128 @@ mod tests {
430491 assert_eq ! ( sub. block_height, 100 ) ;
431492 assert_eq ! ( sub. epoch, 5 ) ;
432493 }
494+
495+ #[ test]
496+ fn test_data_submission_with_metadata ( ) {
497+ let sub = DataSubmission :: new ( "score" , vec ! [ 1 , 2 , 3 ] , "validator1" )
498+ . with_metadata ( "source" , json ! ( "test" ) ) ;
499+
500+ assert_eq ! ( sub. metadata. get( "source" ) , Some ( & json!( "test" ) ) ) ;
501+ }
502+
503+ #[ test]
504+ fn test_value_json ( ) {
505+ let data = json ! ( { "score" : 85 } ) ;
506+ let json_str = serde_json:: to_vec ( & data) . unwrap ( ) ;
507+ let sub = DataSubmission :: new ( "score" , json_str, "validator1" ) ;
508+
509+ let parsed: serde_json:: Value = sub. value_json ( ) . unwrap ( ) ;
510+ assert_eq ! ( parsed, data) ;
511+ }
512+
513+ #[ test]
514+ fn test_value_string ( ) {
515+ let text = "Hello, World!" ;
516+ let sub = DataSubmission :: new ( "message" , text. as_bytes ( ) . to_vec ( ) , "validator1" ) ;
517+
518+ let parsed = sub. value_string ( ) . unwrap ( ) ;
519+ assert_eq ! ( parsed, text) ;
520+ }
521+
522+ #[ test]
523+ fn test_stored_data_is_expired ( ) {
524+ let stored = StoredData {
525+ key : "test" . to_string ( ) ,
526+ value : vec ! [ 1 , 2 , 3 ] ,
527+ scope : DataScope :: Validator ,
528+ validator : Some ( "validator1" . to_string ( ) ) ,
529+ stored_at_block : 100 ,
530+ expires_at_block : Some ( 200 ) ,
531+ version : 1 ,
532+ } ;
533+
534+ assert ! ( !stored. is_expired( 150 ) ) ;
535+ assert ! ( stored. is_expired( 200 ) ) ;
536+ assert ! ( stored. is_expired( 250 ) ) ;
537+
538+ // Test permanent storage (no expiry)
539+ let permanent = StoredData {
540+ expires_at_block : None ,
541+ ..stored
542+ } ;
543+ assert ! ( !permanent. is_expired( 1000000 ) ) ;
544+ }
545+
546+ #[ test]
547+ fn test_stored_data_value_json ( ) {
548+ let data = json ! ( { "result" : "success" } ) ;
549+ let json_bytes = serde_json:: to_vec ( & data) . unwrap ( ) ;
550+
551+ let stored = StoredData {
552+ key : "result" . to_string ( ) ,
553+ value : json_bytes,
554+ scope : DataScope :: Challenge ,
555+ validator : None ,
556+ stored_at_block : 100 ,
557+ expires_at_block : None ,
558+ version : 1 ,
559+ } ;
560+
561+ let parsed: serde_json:: Value = stored. value_json ( ) . unwrap ( ) ;
562+ assert_eq ! ( parsed, data) ;
563+ }
564+
565+ #[ test]
566+ fn test_data_query_new ( ) {
567+ let query = DataQuery :: new ( ) ;
568+ assert ! ( query. key_pattern. is_none( ) ) ;
569+ assert ! ( query. scope. is_none( ) ) ;
570+ assert ! ( query. validator. is_none( ) ) ;
571+ assert ! ( !query. include_expired) ;
572+ assert ! ( query. limit. is_none( ) ) ;
573+ assert ! ( query. offset. is_none( ) ) ;
574+ }
575+
576+ #[ test]
577+ fn test_data_query_key ( ) {
578+ let query = DataQuery :: new ( ) . key ( "score*" ) ;
579+ assert_eq ! ( query. key_pattern, Some ( "score*" . to_string( ) ) ) ;
580+ }
581+
582+ #[ test]
583+ fn test_data_query_scope ( ) {
584+ let query = DataQuery :: new ( ) . scope ( DataScope :: Challenge ) ;
585+ assert_eq ! ( query. scope, Some ( DataScope :: Challenge ) ) ;
586+ }
587+
588+ #[ test]
589+ fn test_data_query_validator ( ) {
590+ let query = DataQuery :: new ( ) . validator ( "validator1" ) ;
591+ assert_eq ! ( query. validator, Some ( "validator1" . to_string( ) ) ) ;
592+ }
593+
594+ #[ test]
595+ fn test_data_query_include_expired ( ) {
596+ let query = DataQuery :: new ( ) . include_expired ( ) ;
597+ assert ! ( query. include_expired) ;
598+ }
599+
600+ #[ test]
601+ fn test_data_query_limit ( ) {
602+ let query = DataQuery :: new ( ) . limit ( 50 ) ;
603+ assert_eq ! ( query. limit, Some ( 50 ) ) ;
604+ }
605+
606+ #[ test]
607+ fn test_data_query_offset ( ) {
608+ let query = DataQuery :: new ( ) . offset ( 100 ) ;
609+ assert_eq ! ( query. offset, Some ( 100 ) ) ;
610+ }
611+
612+ #[ test]
613+ fn test_data_query_default ( ) {
614+ let query = DataQuery :: default ( ) ;
615+ assert ! ( query. key_pattern. is_none( ) ) ;
616+ assert ! ( !query. include_expired) ;
617+ }
433618}
0 commit comments