131 lines
4.5 KiB
Text
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}
|
|
}
|