#!/usr/bin/env nu # DigitalOcean Provider Test Suite Orchestrator # Runs all unit and integration tests (51 total: 14 unit + 37 integration) use unit/test_utils.nu use integration/test_api_client.nu use integration/test_server_lifecycle.nu use integration/test_pricing_cache.nu export def main [] { print "╔════════════════════════════════════════════════════════╗" print "║ DigitalOcean Provider Test Suite ║" print "║ Framework: Mock-based (no real API calls) ║" print "║ Total Tests: 51 (14 unit + 37 integration) ║" print "╚════════════════════════════════════════════════════════╝" print "" # Run unit tests print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "PHASE 1: UNIT TESTS (14 tests)" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "" let unit_result = (test_utils run_unit_tests) print "" print $"Unit Tests Result: ($unit_result.passed)/($unit_result.total) passed" print "" # Run API client tests print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "PHASE 2: INTEGRATION TESTS - API CLIENT (13 tests)" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "" let api_result = (test_api_client run_api_tests) print "" print $"API Client Tests Result: ($api_result.passed)/($api_result.total) passed" print "" # Run server lifecycle tests print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "PHASE 3: INTEGRATION TESTS - SERVER LIFECYCLE (12 tests)" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "" let lifecycle_result = (test_server_lifecycle run_lifecycle_tests) print "" print $"Lifecycle Tests Result: ($lifecycle_result.passed)/($lifecycle_result.total) passed" print "" # Run pricing/cache tests print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "PHASE 4: INTEGRATION TESTS - PRICING & CACHE (12 tests)" print "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" print "" let pricing_result = (test_pricing_cache run_pricing_tests) print "" print $"Pricing Tests Result: ($pricing_result.passed)/($pricing_result.total) passed" print "" # Summary print "╔════════════════════════════════════════════════════════╗" print "║ TEST SUMMARY ║" print "╚════════════════════════════════════════════════════════╝" print "" let total_passed = ( $unit_result.passed + $api_result.passed + $lifecycle_result.passed + $pricing_result.passed ) let total_failed = ( $unit_result.failed + $api_result.failed + $lifecycle_result.failed + $pricing_result.failed ) let total_tests = ( $unit_result.total + $api_result.total + $lifecycle_result.total + $pricing_result.total ) print $" Unit Tests: ($unit_result.passed)/($unit_result.total) passed" print $" API Client Tests: ($api_result.passed)/($api_result.total) passed" print $" Lifecycle Tests: ($lifecycle_result.passed)/($lifecycle_result.total) passed" print $" Pricing Tests: ($pricing_result.passed)/($pricing_result.total) passed" print "" print " ───────────────────────────────────────────────────────" print $" TOTAL: ($total_passed)/($total_tests) passed" print "" if $total_failed == 0 { print " Status: ✓ ALL TESTS PASSED" print "╚════════════════════════════════════════════════════════╝" print "" exit 0 } else { print $" Status: ✗ ($total_failed) TEST(S) FAILED" print "╚════════════════════════════════════════════════════════╝" print "" exit 1 } }