f7a720204a
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
78 lines
2.3 KiB
Rust
78 lines
2.3 KiB
Rust
//! Black-box integration tests for ISettingsRepository.
|
|
//!
|
|
//! Tests exercise the public trait interface against an in-memory SQLite database.
|
|
|
|
use std::sync::Arc;
|
|
|
|
use nomifun_db::{ISettingsRepository, SqliteSettingsRepository, init_database_memory};
|
|
|
|
async fn repo() -> Arc<dyn ISettingsRepository> {
|
|
let db = init_database_memory().await.unwrap();
|
|
Arc::new(SqliteSettingsRepository::new(db.pool().clone()))
|
|
}
|
|
|
|
// -- Get default state --
|
|
|
|
#[tokio::test]
|
|
async fn get_settings_returns_none_when_no_row_exists() {
|
|
let r = repo().await;
|
|
assert!(r.get_settings().await.unwrap().is_none());
|
|
}
|
|
|
|
// -- Upsert creates a row --
|
|
|
|
#[tokio::test]
|
|
async fn upsert_creates_settings_with_given_values() {
|
|
let r = repo().await;
|
|
let s = r.upsert_settings("zh-CN", false, true, true, false).await.unwrap();
|
|
|
|
assert_eq!(s.language, "zh-CN");
|
|
assert!(!s.notification_enabled);
|
|
assert!(s.cron_notification_enabled);
|
|
assert!(s.command_queue_enabled);
|
|
assert!(!s.save_upload_to_workspace);
|
|
assert!(s.updated_at > 0);
|
|
}
|
|
|
|
// -- Upsert then get round-trip --
|
|
|
|
#[tokio::test]
|
|
async fn upsert_then_get_returns_consistent_data() {
|
|
let r = repo().await;
|
|
r.upsert_settings("en-US", true, false, false, true).await.unwrap();
|
|
|
|
let s = r.get_settings().await.unwrap().unwrap();
|
|
assert_eq!(s.language, "en-US");
|
|
assert!(s.notification_enabled);
|
|
assert!(!s.cron_notification_enabled);
|
|
assert!(!s.command_queue_enabled);
|
|
assert!(s.save_upload_to_workspace);
|
|
}
|
|
|
|
// -- Upsert overwrites --
|
|
|
|
#[tokio::test]
|
|
async fn upsert_overwrites_previous_settings() {
|
|
let r = repo().await;
|
|
r.upsert_settings("en-US", true, false, false, false).await.unwrap();
|
|
r.upsert_settings("zh-CN", false, true, true, true).await.unwrap();
|
|
|
|
let s = r.get_settings().await.unwrap().unwrap();
|
|
assert_eq!(s.language, "zh-CN");
|
|
assert!(!s.notification_enabled);
|
|
assert!(s.cron_notification_enabled);
|
|
assert!(s.command_queue_enabled);
|
|
assert!(s.save_upload_to_workspace);
|
|
}
|
|
|
|
// -- updated_at advances on each upsert --
|
|
|
|
#[tokio::test]
|
|
async fn upsert_advances_updated_at() {
|
|
let r = repo().await;
|
|
let first = r.upsert_settings("en-US", true, false, false, false).await.unwrap();
|
|
let second = r.upsert_settings("en-US", true, false, false, false).await.unwrap();
|
|
|
|
assert!(second.updated_at >= first.updated_at);
|
|
}
|