93 lines
3.8 KiB
Rust
93 lines
3.8 KiB
Rust
//! Tests for the enhanced request management functionality
|
|
|
|
use sigsocket_client::prelude::*;
|
|
|
|
#[test]
|
|
fn test_client_request_management() {
|
|
let public_key = hex::decode("02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9").unwrap();
|
|
let mut client = SigSocketClient::new("ws://localhost:8080/ws", public_key).unwrap();
|
|
|
|
// Initially no requests
|
|
assert_eq!(client.pending_request_count(), 0);
|
|
assert!(client.get_pending_requests().is_empty());
|
|
|
|
// Add a request
|
|
let request = SignRequest::new("test-1", "dGVzdCBtZXNzYWdl");
|
|
let public_key_hex = "02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9";
|
|
client.add_pending_request(request.clone(), public_key_hex.to_string());
|
|
|
|
// Check request was added
|
|
assert_eq!(client.pending_request_count(), 1);
|
|
assert!(client.get_pending_request("test-1").is_some());
|
|
|
|
// Check filtering by public key
|
|
let filtered = client.get_requests_for_public_key(public_key_hex);
|
|
assert_eq!(filtered.len(), 1);
|
|
assert_eq!(filtered[0].id(), "test-1");
|
|
|
|
// Add another request for different public key
|
|
let request2 = SignRequest::new("test-2", "dGVzdCBtZXNzYWdlMg==");
|
|
let other_public_key = "03f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9";
|
|
client.add_pending_request(request2, other_public_key.to_string());
|
|
|
|
// Check total count
|
|
assert_eq!(client.pending_request_count(), 2);
|
|
|
|
// Check filtering still works
|
|
let filtered = client.get_requests_for_public_key(public_key_hex);
|
|
assert_eq!(filtered.len(), 1);
|
|
|
|
let filtered_other = client.get_requests_for_public_key(other_public_key);
|
|
assert_eq!(filtered_other.len(), 1);
|
|
|
|
// Remove a request
|
|
let removed = client.remove_pending_request("test-1");
|
|
assert!(removed.is_some());
|
|
assert_eq!(removed.unwrap().id(), "test-1");
|
|
assert_eq!(client.pending_request_count(), 1);
|
|
|
|
// Clear all requests
|
|
client.clear_pending_requests();
|
|
assert_eq!(client.pending_request_count(), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn test_client_request_validation() {
|
|
let public_key = hex::decode("02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9").unwrap();
|
|
let client = SigSocketClient::new("ws://localhost:8080/ws", public_key).unwrap();
|
|
|
|
// Valid request
|
|
let valid_request = SignRequest::new("test-1", "dGVzdCBtZXNzYWdl");
|
|
assert!(client.can_handle_request_for_key(&valid_request, "some-public-key"));
|
|
|
|
// Invalid request - empty ID
|
|
let invalid_request = SignRequest::new("", "dGVzdCBtZXNzYWdl");
|
|
assert!(!client.can_handle_request_for_key(&invalid_request, "some-public-key"));
|
|
|
|
// Invalid request - empty message
|
|
let invalid_request2 = SignRequest::new("test-1", "");
|
|
assert!(!client.can_handle_request_for_key(&invalid_request2, "some-public-key"));
|
|
|
|
// Invalid request - invalid base64
|
|
let invalid_request3 = SignRequest::new("test-1", "invalid-base64!");
|
|
assert!(!client.can_handle_request_for_key(&invalid_request3, "some-public-key"));
|
|
|
|
// Invalid public key
|
|
assert!(!client.can_handle_request_for_key(&valid_request, ""));
|
|
}
|
|
|
|
#[test]
|
|
fn test_client_connection_state() {
|
|
let public_key = hex::decode("02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9").unwrap();
|
|
let client = SigSocketClient::new("ws://localhost:8080/ws", public_key).unwrap();
|
|
|
|
// Initially disconnected
|
|
assert_eq!(client.state(), ConnectionState::Disconnected);
|
|
assert!(!client.is_connected());
|
|
assert!(client.connected_public_key().is_none());
|
|
|
|
// Public key should be available
|
|
assert_eq!(client.public_key_hex(), "02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9");
|
|
assert_eq!(client.url(), "ws://localhost:8080/ws");
|
|
}
|