Rust and WASM did-method-plc tools and structures
1//! Tests for DID validation
2
3use atproto_plc::Did;
4use serde::Deserialize;
5
6#[derive(Deserialize)]
7struct InvalidDidTestCase {
8 did: String,
9 reason: String,
10}
11
12#[test]
13fn test_valid_dids() {
14 let valid_dids_json = include_str!("fixtures/valid_dids.json");
15 let valid_dids: Vec<String> = serde_json::from_str(valid_dids_json).unwrap();
16
17 for did_str in valid_dids {
18 let result = Did::parse(&did_str);
19 assert!(
20 result.is_ok(),
21 "Expected {} to be valid, got error: {:?}",
22 did_str,
23 result.err()
24 );
25
26 let did = result.unwrap();
27 assert_eq!(did.as_str(), did_str);
28 assert!(did.is_valid());
29 assert_eq!(did.identifier().len(), 24);
30 }
31}
32
33#[test]
34fn test_invalid_dids() {
35 let invalid_dids_json = include_str!("fixtures/invalid_dids.json");
36 let invalid_dids: Vec<InvalidDidTestCase> = serde_json::from_str(invalid_dids_json).unwrap();
37
38 for test_case in invalid_dids {
39 let result = Did::parse(&test_case.did);
40 assert!(
41 result.is_err(),
42 "Expected {} to be invalid ({}), but it was accepted",
43 test_case.did,
44 test_case.reason
45 );
46 }
47}
48
49#[test]
50fn test_did_display_and_debug() {
51 let did = Did::parse("did:plc:ewvi7nxzyoun6zhxrhs64oiz").unwrap();
52
53 // Test Display
54 assert_eq!(format!("{}", did), "did:plc:ewvi7nxzyoun6zhxrhs64oiz");
55
56 // Test Debug
57 let debug_str = format!("{:?}", did);
58 assert!(debug_str.contains("Did"));
59}
60
61#[test]
62fn test_did_serialization() {
63 let did = Did::parse("did:plc:ewvi7nxzyoun6zhxrhs64oiz").unwrap();
64
65 // Serialize to JSON
66 let json = serde_json::to_string(&did).unwrap();
67 assert_eq!(json, "\"did:plc:ewvi7nxzyoun6zhxrhs64oiz\"");
68
69 // Deserialize from JSON
70 let deserialized: Did = serde_json::from_str(&json).unwrap();
71 assert_eq!(did, deserialized);
72}
73
74#[test]
75fn test_did_from_str() {
76 use std::str::FromStr;
77
78 let did = Did::from_str("did:plc:ewvi7nxzyoun6zhxrhs64oiz").unwrap();
79 assert_eq!(did.identifier(), "ewvi7nxzyoun6zhxrhs64oiz");
80
81 // Invalid should error
82 assert!(Did::from_str("invalid").is_err());
83}
84
85#[test]
86fn test_did_clone_and_equality() {
87 let did1 = Did::parse("did:plc:ewvi7nxzyoun6zhxrhs64oiz").unwrap();
88 let did2 = did1.clone();
89
90 assert_eq!(did1, did2);
91 assert_eq!(did1.as_str(), did2.as_str());
92}
93
94#[test]
95fn test_did_from_identifier() {
96 let did = Did::from_identifier("ewvi7nxzyoun6zhxrhs64oiz").unwrap();
97 assert_eq!(did.as_str(), "did:plc:ewvi7nxzyoun6zhxrhs64oiz");
98 assert_eq!(did.identifier(), "ewvi7nxzyoun6zhxrhs64oiz");
99
100 // Invalid identifier
101 assert!(Did::from_identifier("tooshort").is_err());
102 assert!(Did::from_identifier("0189abcdefghijklmnopqrst").is_err());
103}