Skip to content

Commit 168d03d

Browse files
authored
Merge pull request #13 from cuteolaf/test/challenge-sdk
test(challenge-sdk): Add comprehensive test coverage
2 parents e455e29 + ddf89c0 commit 168d03d

File tree

11 files changed

+1843
-1
lines changed

11 files changed

+1843
-1
lines changed

crates/challenge-sdk/src/data.rs

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,7 @@ impl Default for DataQuery {
395395
#[cfg(test)]
396396
mod 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

Comments
 (0)