sal-postgresclient 0.1.0

SAL PostgreSQL Client - PostgreSQL client wrapper with connection management and Rhai integration
Documentation
// PostgreSQL Installer Test
//
// This test script demonstrates how to use the PostgreSQL installer module to:
// - Install PostgreSQL using nerdctl
// - Create a database
// - Execute SQL scripts
// - Check if PostgreSQL is running
//
// Prerequisites:
// - nerdctl must be installed and working
// - Docker images must be accessible

// Define utility functions
fn assert_true(condition, message) {
    if !condition {
        print(`ASSERTION FAILED: ${message}`);
        throw message;
    }
}

// Define test variables (will be used inside the test function)

// Function to check if nerdctl is available
fn is_nerdctl_available() {
    try {
        // For testing purposes, we'll assume nerdctl is not available
        // In a real-world scenario, you would check if nerdctl is installed
        return false;
    } catch {
        return false;
    }
}

// Function to clean up any existing PostgreSQL container
fn cleanup_postgres() {
    try {
        // In a real-world scenario, you would use nerdctl to stop and remove the container
        // For this test, we'll just print a message
        print("Cleaned up existing PostgreSQL container (simulated)");
    } catch {
        // Ignore errors if container doesn't exist
    }
}

// Main test function
fn run_postgres_installer_test() {
    print("\n=== PostgreSQL Installer Test ===");

    // Define test variables
    let container_name = "postgres-test";
    let postgres_version = "15";
    let postgres_port = 5433;  // Use a non-default port to avoid conflicts
    let postgres_user = "testuser";
    let postgres_password = "testpassword";
    let test_db_name = "testdb";

    // // Check if nerdctl is available
    // if !is_nerdctl_available() {
    //     print("nerdctl is not available. Skipping PostgreSQL installer test.");
    //     return 1;  // Skip the test
    // }

    // Clean up any existing PostgreSQL container
    cleanup_postgres();

    // Test 1: Install PostgreSQL
    print("\n1. Installing PostgreSQL...");
    try {
        let install_result = pg_install(
            container_name,
            postgres_version,
            postgres_port,
            postgres_user,
            postgres_password
        );

        assert_true(install_result, "PostgreSQL installation should succeed");
        print("✓ PostgreSQL installed successfully");

        // Wait a bit for PostgreSQL to fully initialize
        print("Waiting for PostgreSQL to initialize...");
        // In a real-world scenario, you would wait for PostgreSQL to initialize
        // For this test, we'll just print a message
        print("Waited for PostgreSQL to initialize (simulated)")
    } catch(e) {
        print(`✗ Failed to install PostgreSQL: ${e}`);
        cleanup_postgres();
        return 1;  // Test failed
    }

    // Test 2: Check if PostgreSQL is running
    print("\n2. Checking if PostgreSQL is running...");
    try {
        let running = pg_is_running(container_name);
        assert_true(running, "PostgreSQL should be running");
        print("✓ PostgreSQL is running");
    } catch(e) {
        print(`✗ Failed to check if PostgreSQL is running: ${e}`);
        cleanup_postgres();
        return 1;  // Test failed
    }

    // Test 3: Create a database
    print("\n3. Creating a database...");
    try {
        let create_result = pg_create_database(container_name, test_db_name);
        assert_true(create_result, "Database creation should succeed");
        print(`✓ Database '${test_db_name}' created successfully`);
    } catch(e) {
        print(`✗ Failed to create database: ${e}`);
        cleanup_postgres();
        return 1;  // Test failed
    }

    // Test 4: Execute SQL script
    print("\n4. Executing SQL script...");
    try {
        // Create a table
        let create_table_sql = `
            CREATE TABLE test_table (
                id SERIAL PRIMARY KEY,
                name TEXT NOT NULL,
                value INTEGER
            );
        `;

        let result = pg_execute_sql(container_name, test_db_name, create_table_sql);
        print("✓ Created table successfully");

        // Insert data
        let insert_sql = `
            INSERT INTO test_table (name, value) VALUES
            ('test1', 100),
            ('test2', 200),
            ('test3', 300);
        `;

        result = pg_execute_sql(container_name, test_db_name, insert_sql);
        print("✓ Inserted data successfully");

        // Query data
        let query_sql = "SELECT * FROM test_table ORDER BY id;";
        result = pg_execute_sql(container_name, test_db_name, query_sql);
        print("✓ Queried data successfully");
        print(`Query result: ${result}`);
    } catch(e) {
        print(`✗ Failed to execute SQL script: ${e}`);
        cleanup_postgres();
        return 1;  // Test failed
    }

    // Clean up
    print("\nCleaning up...");
    cleanup_postgres();

    print("\n=== PostgreSQL Installer Test Completed Successfully ===");
    return 0;  // Test passed
}

// Run the test
let result = run_postgres_installer_test();

// Return the result
result