refactor: update dependencies and remove unused code
- Added new dependencies: `adler2`, `crc32fast`, `flate2`, `miniz_oxide`, and `libredox`. - Updated existing dependencies: `tokio-rustls` to version 0.26.4 and `filetime` to version 0.2.27. - Removed the `backup.rs` file as it is no longer needed. - Introduced tests for configuration and credential management. - Enhanced the `identity` module to generate W3C compliant DID documents. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -70,3 +70,117 @@ impl Default for StateManager {
|
||||
Self::new()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::data_model::DataModel;
|
||||
|
||||
#[test]
|
||||
fn test_state_manager_new() {
|
||||
let sm = StateManager::new();
|
||||
// Should be constructible without panic
|
||||
let _ = sm.subscribe();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_state_manager_default() {
|
||||
let sm = StateManager::default();
|
||||
let _ = sm.subscribe();
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_snapshot_initial_revision_zero() {
|
||||
let sm = StateManager::new();
|
||||
let (data, rev) = sm.get_snapshot().await;
|
||||
assert_eq!(rev, 0);
|
||||
// DataModel::new() sets version from CARGO_PKG_VERSION
|
||||
assert_eq!(data.server_info.version, env!("CARGO_PKG_VERSION"));
|
||||
assert!(data.package_data.is_empty());
|
||||
assert!(data.notifications.is_empty());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_update_data_increments_revision() {
|
||||
let sm = StateManager::new();
|
||||
|
||||
let (_, rev0) = sm.get_snapshot().await;
|
||||
assert_eq!(rev0, 0);
|
||||
|
||||
sm.update_data(DataModel::new()).await;
|
||||
let (_, rev1) = sm.get_snapshot().await;
|
||||
assert_eq!(rev1, 1);
|
||||
|
||||
sm.update_data(DataModel::new()).await;
|
||||
let (_, rev2) = sm.get_snapshot().await;
|
||||
assert_eq!(rev2, 2);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_update_data_stores_new_data() {
|
||||
let sm = StateManager::new();
|
||||
|
||||
let mut new_data = DataModel::new();
|
||||
new_data.server_info.name = Some("TestNode".to_string());
|
||||
new_data.ui.theme = "light".to_string();
|
||||
sm.update_data(new_data).await;
|
||||
|
||||
let (snapshot, _) = sm.get_snapshot().await;
|
||||
assert_eq!(snapshot.server_info.name, Some("TestNode".to_string()));
|
||||
assert_eq!(snapshot.ui.theme, "light");
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_subscribe_receives_updates() {
|
||||
let sm = StateManager::new();
|
||||
let mut rx = sm.subscribe();
|
||||
|
||||
let mut data = DataModel::new();
|
||||
data.server_info.name = Some("BroadcastTest".to_string());
|
||||
sm.update_data(data).await;
|
||||
|
||||
let msg = rx.recv().await.unwrap();
|
||||
assert_eq!(msg.rev, 1);
|
||||
assert!(msg.data.is_some());
|
||||
let received_data = msg.data.unwrap();
|
||||
assert_eq!(received_data.server_info.name, Some("BroadcastTest".to_string()));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_multiple_subscribers_receive_same_update() {
|
||||
let sm = StateManager::new();
|
||||
let mut rx1 = sm.subscribe();
|
||||
let mut rx2 = sm.subscribe();
|
||||
|
||||
sm.update_data(DataModel::new()).await;
|
||||
|
||||
let msg1 = rx1.recv().await.unwrap();
|
||||
let msg2 = rx2.recv().await.unwrap();
|
||||
assert_eq!(msg1.rev, msg2.rev);
|
||||
assert_eq!(msg1.rev, 1);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_get_initial_message() {
|
||||
let sm = StateManager::new();
|
||||
|
||||
let mut data = DataModel::new();
|
||||
data.server_info.name = Some("InitMsg".to_string());
|
||||
sm.update_data(data).await;
|
||||
|
||||
let msg = sm.get_initial_message().await;
|
||||
assert_eq!(msg.rev, 1);
|
||||
assert!(msg.data.is_some());
|
||||
assert!(msg.patch.is_none());
|
||||
assert_eq!(msg.data.unwrap().server_info.name, Some("InitMsg".to_string()));
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_update_without_subscribers_does_not_panic() {
|
||||
let sm = StateManager::new();
|
||||
// No subscribers — send should silently succeed
|
||||
sm.update_data(DataModel::new()).await;
|
||||
let (_, rev) = sm.get_snapshot().await;
|
||||
assert_eq!(rev, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user