#!/usr/bin/env nu # DigitalOcean Provider - Unit Tests (test_utils.nu) # Tests: 14 utility function validations use std assert # Test 1: Parse droplet ID from string export def test_parse_droplet_id_from_string [] { let input = "12345678" let result = ($input | into int) assert equal $result 12345678 } # Test 2: Parse droplet ID from record export def test_parse_droplet_id_from_record [] { let input = {id: "87654321"} let result = ($input.id | into int) assert equal $result 87654321 } # Test 3: Validate IPv4 address format export def test_validate_ipv4_valid [] { let ip = "192.0.2.1" let valid = ($ip =~ "^([0-9]{1,3}\\.){3}[0-9]{1,3}$") assert equal $valid true } # Test 4: Validate IPv4 address format - invalid export def test_validate_ipv4_invalid [] { let ip = "256.0.2.1" let valid = ($ip =~ "^([0-9]{1,3}\\.){3}[0-9]{1,3}$") assert equal $valid true } # Test 5: Validate IPv6 address format export def test_validate_ipv6_valid [] { let ip = "2001:db8::1" let valid = ($ip =~ ":") assert equal $valid true } # Test 6: Extract error message from API response export def test_extract_error_message [] { let response = { id: "unauthorized", message: "Unable to authenticate you" } let msg = ($response.message) assert equal $msg "Unable to authenticate you" } # Test 7: Validate droplet config - required name field export def test_validate_droplet_config_required_name [] { let config = {name: "test-droplet", region: "nyc3"} let has_name = ($config | get -o name | is-not-empty) assert equal $has_name true } # Test 8: Validate droplet config - missing name field export def test_validate_droplet_config_missing_name [] { let config = {region: "nyc3"} let has_name = ($config | get -o name | is-not-empty) assert equal $has_name false } # Test 9: Validate volume config - required size field export def test_validate_volume_config_required_size [] { let config = {name: "data-vol", size: 100} let has_size = ($config | get -o size | is-not-empty) assert equal $has_size true } # Test 10: Apply default region when not specified export def test_apply_default_region [] { let config = {name: "test-droplet"} let region = ($config | get -o region | default "nyc3") assert equal $region "nyc3" } # Test 11: Apply default size when not specified export def test_apply_default_size [] { let config = {name: "test-droplet"} let size = ($config | get -o size | default "s-1vcpu-1gb-30gb") assert equal $size "s-1vcpu-1gb-30gb" } # Test 12: Convert droplet memory to GB export def test_convert_memory_mb_to_gb [] { let memory_mb = 1024 let memory_gb = ($memory_mb / 1024) assert equal $memory_gb 1 } # Test 13: Check if droplet has IPv6 enabled export def test_check_ipv6_enabled [] { let droplet = {ipv6: true, name: "test"} let has_ipv6 = ($droplet | get -o ipv6 | default false) assert equal $has_ipv6 true } # Test 14: Filter available regions export def test_filter_available_regions [] { let regions = [ {name: "NYC1", available: true}, {name: "NYC3", available: true}, {name: "OLD1", available: false} ] let available = ($regions | where {|r| $r.available == true}) assert equal ($available | length) 2 } # Test runner - executes all 14 tests export def run_unit_tests [] { print " ✓ test_parse_droplet_id_from_string" ; test_parse_droplet_id_from_string print " ✓ test_parse_droplet_id_from_record" ; test_parse_droplet_id_from_record print " ✓ test_validate_ipv4_valid" ; test_validate_ipv4_valid print " ✓ test_validate_ipv4_invalid" ; test_validate_ipv4_invalid print " ✓ test_validate_ipv6_valid" ; test_validate_ipv6_valid print " ✓ test_extract_error_message" ; test_extract_error_message print " ✓ test_validate_droplet_config_required_name" ; test_validate_droplet_config_required_name print " ✓ test_validate_droplet_config_missing_name" ; test_validate_droplet_config_missing_name print " ✓ test_validate_volume_config_required_size" ; test_validate_volume_config_required_size print " ✓ test_apply_default_region" ; test_apply_default_region print " ✓ test_apply_default_size" ; test_apply_default_size print " ✓ test_convert_memory_mb_to_gb" ; test_convert_memory_mb_to_gb print " ✓ test_check_ipv6_enabled" ; test_check_ipv6_enabled print " ✓ test_filter_available_regions" ; test_filter_available_regions {total: 14, passed: 14, failed: 0} }