Files
core/test/rust/native/application/database/relation.rs
T
2026-11-03 03:32:07 +00:00

76 lines
2.7 KiB
Rust

use super::*;
fn acceptance(connection: serde_json::Value, name: &str) {
let directory = Directory::new();
let project = Project::load(&fixture().with_file_name("database-relation")).unwrap();
let program = project.check().unwrap();
let binary = build::build(&program, &project.sources, "main", &directory.0.join(name)).unwrap();
std::fs::create_dir(directory.0.join("config")).unwrap();
std::fs::write(
directory.0.join("config/setting.json"),
serde_json::json!({"database":{"default":connection}}).to_string(),
)
.unwrap();
let run = |command: &str| {
let result = execute(&binary, &format!("demo.people.{command}"), "{}");
assert!(
result.status.success(),
"{command}: {}",
String::from_utf8_lossy(&result.stderr)
);
serde_json::from_slice::<serde_json::Value>(&result.stdout).unwrap()["data"].clone()
};
assert_eq!(
run("users"),
serde_json::json!(["Ada:Team:2", "Ben:none:1"])
);
assert_eq!(
run("plain"),
serde_json::json!(["Ada:unloaded:-1", "Ben:unloaded:-1"])
);
assert_eq!(run("first"), "Ada:Team:2");
let cursor = run("cursor");
assert_eq!(cursor["names"], serde_json::json!(["Ada:Team:2"]));
assert_eq!(cursor["has_more"], true);
assert_eq!(cursor["next"], "Ada:Team:2");
let mut restrictive = connection;
restrictive["max_page_size"] = 1.into();
std::fs::write(
directory.0.join("config/setting.json"),
serde_json::json!({"database":{"default":restrictive}}).to_string(),
)
.unwrap();
let result = execute(&binary, "demo.people.first", "{}");
assert!(!result.status.success());
assert!(
String::from_utf8_lossy(&result.stderr).contains("database operation failed"),
"{}",
String::from_utf8_lossy(&result.stderr)
);
}
#[test]
fn related_values_join_and_group_with_one_sqlite_connection() {
acceptance(
serde_json::json!({"type":"sqlite","path":"related.db","max_connections":1,"max_page_size":2}),
"related-sqlite",
);
}
#[cfg(feature = "postgres")]
#[test]
#[ignore = "requires isolated database.postgres_test"]
fn related_values_join_and_group_with_one_postgres_connection() {
let directory = Directory::new();
let schema = super::postgres::Schema::new(
&directory.0,
"dever_native_relation",
"CREATE SCHEMA dever_native_relation",
"DROP SCHEMA dever_native_relation CASCADE",
);
let mut connection = schema.connection.clone();
connection["max_connections"] = 1.into();
connection["max_page_size"] = 2.into();
acceptance(connection, "related-postgres");
}