#!/usr/bin/env nu # Server lifecycle integration tests def test-result [name: string, result: bool] { if $result { print $"✓ ($name)" } else { print $"✗ ($name)" } $result } def load-mocks [] { open tests/mocks/mock_api_responses.json } def test-list-servers [] { let mocks = (load-mocks) let servers = $mocks.servers_list.servers test-result "Lifecycle: List servers returns data" (($servers | length) > 0) } def test-server-info-structure [] { let mocks = (load-mocks) let server = ($mocks.servers_list.servers | get -o 0) let t1 = (test-result "Lifecycle: Server has id" ($server | get -o id | is-not-empty)) let t2 = (test-result "Lifecycle: Server has name" ($server | get -o name | is-not-empty)) let t3 = (test-result "Lifecycle: Server has instance_type" ($server | get -o instance_type | is-not-empty)) let t4 = (test-result "Lifecycle: Server has zone" ($server | get -o zone | is-not-empty)) $t1 and $t2 and $t3 and $t4 } def test-server-creation-response [] { let config = {name: "new-server", instance_type: "medium", zone: "us-west-1"} let t1 = (test-result "Lifecycle: Server creation requires name" ($config | get -o name | is-not-empty)) let t2 = (test-result "Lifecycle: Server creation has type" ($config | get -o instance_type | is-not-empty)) $t1 and $t2 } def test-server-state-transitions [] { let mocks = (load-mocks) let servers = $mocks.servers_list.servers let running = ($servers | where {|s| $s.status == "running"} | length) let stopped = ($servers | where {|s| $s.status == "stopped"} | length) let t1 = (test-result "Lifecycle: Running state exists" ($running > 0)) let t2 = (test-result "Lifecycle: Stopped state exists" ($stopped > 0)) $t1 and $t2 } def test-instance-type-info [] { let mocks = (load-mocks) let pricing = $mocks.pricing_data let small = ($pricing | where {|p| $p.instance_type == "small"} | get -o 0) test-result "Lifecycle: Instance type pricing available" ($small | get -o hourly_rate | is-not-empty) } def test-zone-info [] { let mocks = (load-mocks) let server = ($mocks.servers_list.servers | get -o 0) test-result "Lifecycle: Server has zone info" ($server | get -o zone | is-not-empty) } def test-volume-attachment [] { let mocks = (load-mocks) let volumes = $mocks.volumes_list.volumes let in_use = ($volumes | where {|v| $v.status == "in-use"} | length) test-result "Lifecycle: Volumes can be attached" ($in_use > 0) } def test-multiple-servers [] { let mocks = (load-mocks) let servers = $mocks.servers_list.servers test-result "Lifecycle: Multiple servers available" (($servers | length) > 1) } def test-server-naming [] { let mocks = (load-mocks) let servers = $mocks.servers_list.servers let names = ($servers | each {|s| $s.name}) let unique_names = ($names | uniq | length) test-result "Lifecycle: Servers have unique names" ($unique_names > 0) } def test-instance-type-variety [] { let mocks = (load-mocks) let servers = $mocks.servers_list.servers let types = ($servers | each {|s| $s.instance_type}) let unique_types = ($types | uniq | length) test-result "Lifecycle: Different instance types available" ($unique_types > 0) } def test-zone-variety [] { let mocks = (load-mocks) let servers = $mocks.servers_list.servers let zones = ($servers | each {|s| $s.zone}) let unique_zones = ($zones | uniq | length) test-result "Lifecycle: Servers in different zones" ($unique_zones > 0) } def main [] { print "=== Server Lifecycle Integration Tests ===" print "" let results = [ (test-list-servers), (test-server-info-structure), (test-server-creation-response), (test-server-state-transitions), (test-instance-type-info), (test-zone-info), (test-volume-attachment), (test-multiple-servers), (test-server-naming), (test-instance-type-variety), (test-zone-variety), (test-list-servers) ] let passed = ($results | where {|it| $it == true} | length) let failed = ($results | where {|it| $it == false} | length) print "" print $"Test Results: ($passed) passed, ($failed) failed" { passed: $passed, failed: $failed, total: ($passed + $failed) } } main