#![cfg(target_arch = "wasm32")]
use absurder_sql::{Database, DatabaseConfig};
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
#[wasm_bindgen_test]
async fn test_page_size_config_is_applied() {
web_sys::console::log_1(&"=== Testing page_size configuration ===".into());
let mut config = DatabaseConfig::default();
config.name = "page_size_test_8kb".to_string();
config.page_size = Some(8192);
let mut db = Database::new(config).await.unwrap();
let result = db.execute("PRAGMA page_size").await.unwrap();
let result_json = js_sys::JSON::stringify(&result).unwrap();
let result_str = result_json.as_string().unwrap();
web_sys::console::log_1(&format!("Page size query result: {}", result_str).into());
assert!(
result_str.contains("8192"),
"Expected page_size to be 8192, got: {}",
result_str
);
web_sys::console::log_1(&"page_size configuration applied correctly".into());
db.close().await.unwrap();
}
#[wasm_bindgen_test]
async fn test_cache_size_config_is_applied() {
web_sys::console::log_1(&"=== Testing cache_size configuration ===".into());
let mut config = DatabaseConfig::default();
config.name = "cache_size_test".to_string();
config.cache_size = Some(5000);
let mut db = Database::new(config).await.unwrap();
let result = db.execute("PRAGMA cache_size").await.unwrap();
let result_json = js_sys::JSON::stringify(&result).unwrap();
let result_str = result_json.as_string().unwrap();
web_sys::console::log_1(&format!("Cache size query result: {}", result_str).into());
assert!(
result_str.contains("5000") || result_str.contains("-5000"),
"Expected cache_size to be 5000 or -5000, got: {}",
result_str
);
web_sys::console::log_1(&"cache_size configuration applied correctly".into());
db.close().await.unwrap();
}
#[wasm_bindgen_test]
async fn test_journal_mode_config_is_applied() {
web_sys::console::log_1(&"=== Testing journal_mode configuration ===".into());
let config = DatabaseConfig {
name: "journal_mode_test_wal".to_string(),
journal_mode: Some("WAL".to_string()),
..Default::default()
};
let mut db = Database::new(config).await.unwrap();
let result = db.execute("PRAGMA journal_mode").await.unwrap();
let result_json = js_sys::JSON::stringify(&result).unwrap();
let result_str = result_json.as_string().unwrap().to_uppercase();
web_sys::console::log_1(&format!("Journal mode query result: {}", result_str).into());
assert!(
result_str.contains("WAL"),
"Expected journal_mode to be WAL (shared memory now implemented), got: {}",
result_str
);
web_sys::console::log_1(
&"journal_mode configuration applied correctly (WAL with shared memory)".into(),
);
db.close().await.unwrap();
}
#[wasm_bindgen_test]
async fn test_auto_vacuum_config_is_applied() {
web_sys::console::log_1(&"=== Testing auto_vacuum configuration ===".into());
let mut config = DatabaseConfig::default();
config.name = "auto_vacuum_test".to_string();
config.auto_vacuum = Some(true);
let mut db = Database::new(config).await.unwrap();
db.execute("CREATE TABLE test (id INTEGER)").await.unwrap();
let result = db.execute("PRAGMA auto_vacuum").await.unwrap();
let result_json = js_sys::JSON::stringify(&result).unwrap();
let result_str = result_json.as_string().unwrap();
web_sys::console::log_1(&format!("Auto vacuum query result: {}", result_str).into());
assert!(
!result_str.contains("\"0\"")
|| result_str.contains("\"1\"")
|| result_str.contains("\"2\""),
"Expected auto_vacuum to be enabled (1 or 2), got: {}",
result_str
);
web_sys::console::log_1(&"auto_vacuum configuration applied correctly".into());
db.close().await.unwrap();
}
#[wasm_bindgen_test]
async fn test_all_config_options_together() {
web_sys::console::log_1(&"=== Testing all config options together ===".into());
let config = DatabaseConfig {
name: "all_config_test".to_string(),
version: Some(2),
cache_size: Some(8000),
page_size: Some(4096),
auto_vacuum: Some(true),
journal_mode: Some("WAL".to_string()),
max_export_size_bytes: Some(100 * 1024 * 1024), };
let mut db = Database::new(config).await.unwrap();
let page_result = db.execute("PRAGMA page_size").await;
assert!(page_result.is_ok(), "Should query page_size");
let cache_result = db.execute("PRAGMA cache_size").await;
assert!(cache_result.is_ok(), "Should query cache_size");
let journal_result = db.execute("PRAGMA journal_mode").await;
assert!(journal_result.is_ok(), "Should query journal_mode");
db.execute("CREATE TABLE test (id INTEGER)").await.unwrap();
let vacuum_result = db.execute("PRAGMA auto_vacuum").await;
assert!(vacuum_result.is_ok(), "Should query auto_vacuum");
web_sys::console::log_1(&"All config options work together".into());
db.close().await.unwrap();
}