107 lines
3.2 KiB
Plaintext
107 lines
3.2 KiB
Plaintext
// 01_postgres_connection.rhai
|
|
// Tests for PostgreSQL client connection and basic operations
|
|
|
|
// Custom assert function
|
|
fn assert_true(condition, message) {
|
|
if !condition {
|
|
print(`ASSERTION FAILED: ${message}`);
|
|
throw message;
|
|
}
|
|
}
|
|
|
|
// Helper function to check if PostgreSQL is available
|
|
fn is_postgres_available() {
|
|
try {
|
|
// Try to execute a simple connection
|
|
let connect_result = pg_connect();
|
|
return connect_result;
|
|
} catch(err) {
|
|
print(`PostgreSQL connection error: ${err}`);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
print("=== Testing PostgreSQL Client Connection ===");
|
|
|
|
// Check if PostgreSQL is available
|
|
let postgres_available = is_postgres_available();
|
|
if !postgres_available {
|
|
print("PostgreSQL server is not available. Skipping PostgreSQL tests.");
|
|
// Exit gracefully without error
|
|
return;
|
|
}
|
|
|
|
print("✓ PostgreSQL server is available");
|
|
|
|
// Test pg_ping function
|
|
print("Testing pg_ping()...");
|
|
let ping_result = pg_ping();
|
|
assert_true(ping_result, "PING should return true");
|
|
print(`✓ pg_ping(): Returned ${ping_result}`);
|
|
|
|
// Test pg_execute function
|
|
print("Testing pg_execute()...");
|
|
let test_table = "rhai_test_table";
|
|
|
|
// Create a test table
|
|
let create_table_query = `
|
|
CREATE TABLE IF NOT EXISTS ${test_table} (
|
|
id SERIAL PRIMARY KEY,
|
|
name TEXT NOT NULL,
|
|
value INTEGER
|
|
)
|
|
`;
|
|
|
|
let create_result = pg_execute(create_table_query);
|
|
assert_true(create_result >= 0, "CREATE TABLE operation should succeed");
|
|
print(`✓ pg_execute(): Successfully created table ${test_table}`);
|
|
|
|
// Insert a test row
|
|
let insert_query = `
|
|
INSERT INTO ${test_table} (name, value)
|
|
VALUES ('test_name', 42)
|
|
`;
|
|
|
|
let insert_result = pg_execute(insert_query);
|
|
assert_true(insert_result > 0, "INSERT operation should succeed");
|
|
print(`✓ pg_execute(): Successfully inserted row into ${test_table}`);
|
|
|
|
// Test pg_query function
|
|
print("Testing pg_query()...");
|
|
let select_query = `
|
|
SELECT * FROM ${test_table}
|
|
`;
|
|
|
|
let select_result = pg_query(select_query);
|
|
assert_true(select_result.len() > 0, "SELECT should return at least one row");
|
|
print(`✓ pg_query(): Successfully retrieved ${select_result.len()} rows from ${test_table}`);
|
|
|
|
// Test pg_query_one function
|
|
print("Testing pg_query_one()...");
|
|
let select_one_query = `
|
|
SELECT * FROM ${test_table} LIMIT 1
|
|
`;
|
|
|
|
let select_one_result = pg_query_one(select_one_query);
|
|
assert_true(select_one_result["name"] == "test_name", "SELECT ONE should return the correct name");
|
|
assert_true(select_one_result["value"] == "42", "SELECT ONE should return the correct value");
|
|
print(`✓ pg_query_one(): Successfully retrieved row with name=${select_one_result["name"]} and value=${select_one_result["value"]}`);
|
|
|
|
// Clean up
|
|
print("Cleaning up...");
|
|
let drop_table_query = `
|
|
DROP TABLE IF EXISTS ${test_table}
|
|
`;
|
|
|
|
let drop_result = pg_execute(drop_table_query);
|
|
assert_true(drop_result >= 0, "DROP TABLE operation should succeed");
|
|
print(`✓ pg_execute(): Successfully dropped table ${test_table}`);
|
|
|
|
// Test pg_reset function
|
|
print("Testing pg_reset()...");
|
|
let reset_result = pg_reset();
|
|
assert_true(reset_result, "RESET should return true");
|
|
print(`✓ pg_reset(): Successfully reset PostgreSQL client`);
|
|
|
|
print("All PostgreSQL connection tests completed successfully!");
|