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::(&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"); }