Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
205 changes: 57 additions & 148 deletions packages/rs-sdk/tests/dpns_queries_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,146 +30,68 @@ async fn test_dpns_queries_from_docs() {
.build()
.expect("Failed to create SDK");

println!("Testing DPNS queries with values from wasm-sdk docs.html...\n");

// Test 1: Check availability of "alice"
println!("1. Testing dpns_check_availability('alice'):");
match sdk.check_dpns_name_availability(TEST_USERNAME).await {
Ok(is_available) => {
println!(
" ✅ Success: Name 'alice' is {}",
if is_available {
"AVAILABLE"
} else {
"NOT AVAILABLE"
}
);
}
Err(e) => {
println!(" ❌ Error: {}", e);
}
}
println!();

// Test 2: Resolve "alice" to identity ID
println!("2. Testing dpns_resolve_name('alice'):");
match sdk.resolve_dpns_name_to_identity(TEST_USERNAME).await {
Ok(Some(identity_id)) => {
println!(
" ✅ Success: 'alice' resolves to identity: {}",
identity_id
);
}
Ok(None) => {
println!(" ℹ️ Name 'alice' not found (not registered)");
}
Err(e) => {
println!(" ❌ Error: {}", e);
}
}
println!();
// Test 1: Check availability of "alice" — should be taken (registered name)
let is_available = sdk
.check_dpns_name_availability(TEST_USERNAME)
.await
.expect("check availability should succeed");
assert!(
!is_available,
"well-known test name 'alice' should not be available"
);

// Test 3: Get DPNS usernames for identity
println!(
"3. Testing get_dpns_usernames_by_identity('{}'):",
TEST_IDENTITY_ID
// Test 2: Resolve "alice" to identity ID — should resolve to some identity
let maybe_identity = sdk
.resolve_dpns_name_to_identity(TEST_USERNAME)
.await
.expect("resolve should succeed");
assert!(
maybe_identity.is_some(),
"'alice' should resolve to an identity"
);

// Test 3: Get DPNS usernames for identity
// Parse the identity ID from base58
let identity_id = match dash_sdk::dpp::prelude::Identifier::from_string(
let identity_id = dash_sdk::dpp::prelude::Identifier::from_string(
TEST_IDENTITY_ID,
dpp::platform_value::string_encoding::Encoding::Base58,
) {
Ok(id) => id,
Err(e) => {
println!(" ❌ Error parsing identity ID: {}", e);
return;
}
};

match sdk
)
.expect("identity id should parse");

let usernames = sdk
.get_dpns_usernames_by_identity(identity_id, Some(10))
.await
{
Ok(usernames) => {
if usernames.is_empty() {
println!(" ℹ️ No usernames found for this identity");
} else {
println!(" ✅ Success: Found {} usernames:", usernames.len());
for (i, username) in usernames.iter().enumerate() {
println!(" [{}] {}", i + 1, username.full_name);
println!(" - Label: {}", username.label);
println!(" - Normalized: {}", username.normalized_label);
println!(" - Owner ID: {}", username.owner_id);
if let Some(records_id) = &username.records_identity_id {
println!(" - Records Identity: {}", records_id);
}
}
}
}
Err(e) => {
println!(" ❌ Error: {}", e);
}
}
println!();
.expect("get usernames by identity should succeed");
assert!(
!usernames.is_empty(),
"known test identity should own at least one username"
);

// Test 4: Search DPNS names by prefix "ali"
println!("4. Testing search_dpns_names('{}'):", TEST_PREFIX);
match sdk.search_dpns_names(TEST_PREFIX, Some(10)).await {
Ok(usernames) => {
if usernames.is_empty() {
println!(" ℹ️ No names found starting with '{}'", TEST_PREFIX);
} else {
println!(
" ✅ Success: Found {} names starting with '{}':",
usernames.len(),
TEST_PREFIX
);
for (i, username) in usernames.iter().enumerate() {
println!(" [{}] {}", i + 1, username.full_name);
println!(" - Label: {}", username.label);
println!(" - Normalized: {}", username.normalized_label);
println!(" - Owner ID: {}", username.owner_id);
}
}
}
Err(e) => {
println!(" ❌ Error: {}", e);
}
}
println!();
let search_results = sdk
.search_dpns_names(TEST_PREFIX, Some(10))
.await
.expect("search should succeed");
assert!(
!search_results.is_empty(),
"search for prefix 'ali' should return at least one result"
);

// Test with a name that's more likely to exist on testnet
println!("5. Testing with 'therealslimshaddy5' (known existing name):");
match sdk
let maybe_identity = sdk
.resolve_dpns_name_to_identity("therealslimshaddy5")
.await
{
Ok(Some(identity_id)) => {
println!(
" ✅ Success: 'therealslimshaddy5' resolves to identity: {}",
identity_id
);

// Get usernames for this identity
match sdk
.get_dpns_usernames_by_identity(identity_id, Some(5))
.await
{
Ok(usernames) => {
println!(" ✅ This identity owns {} usernames", usernames.len());
}
Err(e) => {
println!(" ❌ Error getting usernames: {}", e);
}
}
}
Ok(None) => {
println!(" ℹ️ Name 'therealslimshaddy5' not found");
}
Err(e) => {
println!(" ❌ Error: {}", e);
}
.expect("resolve should succeed");

if let Some(identity_id) = maybe_identity {
let usernames = sdk
.get_dpns_usernames_by_identity(identity_id, Some(5))
.await
.expect("get usernames by identity should succeed");
assert!(
!usernames.is_empty(),
"resolved identity should own at least one username"
);
}
}

Expand All @@ -196,30 +118,17 @@ async fn test_dpns_search_variations() {
.build()
.expect("Failed to create SDK");

println!("Testing DPNS search with various prefixes...\n");

let test_prefixes = vec!["a", "test", "d", "dash", "demo", "user"];

for prefix in test_prefixes {
println!("Searching for names starting with '{}':", prefix);
match sdk.search_dpns_names(prefix, Some(5)).await {
Ok(usernames) => {
if usernames.is_empty() {
println!(" - No names found");
} else {
println!(" - Found {} names:", usernames.len());
for username in usernames.iter().take(3) {
println!(" • {}", username.full_name);
}
if usernames.len() > 3 {
println!(" ... and {} more", usernames.len() - 3);
}
}
}
Err(e) => {
println!(" - Error: {}", e);
}
}
println!();
// Verify search returns without error; results may vary by prefix on testnet
let results = sdk
.search_dpns_names(prefix, Some(5))
.await
.expect("search should succeed");
assert!(
results.len() <= 5,
"search for '{prefix}' should respect the limit of 5"
);
}
}
Loading
Loading