provisioning-catalog/providers/digitalocean/tests/unit/test_utils.nu

131 lines
4.5 KiB
Text

#!/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}
}