provisioning-catalog/providers/digitalocean/tests/integration/test_pricing_cache.nu

54 lines
3.1 KiB
Text

#!/usr/bin/env nu
# DigitalOcean Provider - Integration Tests (Pricing & Cache - 12 tests)
use std assert
def mock_pricing_cache_init [] {
{
timestamp: 1704700800,
ttl: 3600,
sizes: (open ($env.PROVISIONING)/extensions/providers/digitalocean/tests/mocks/mock_api_responses.json | get sizes_list.sizes),
regions: (open ($env.PROVISIONING)/extensions/providers/digitalocean/tests/mocks/mock_api_responses.json | get regions_list.regions)
}
}
def mock_get_size_price [slug: string] {
let sizes = (open ($env.PROVISIONING)/extensions/providers/digitalocean/tests/mocks/mock_api_responses.json | get sizes_list.sizes)
let size = ($sizes | where {|s| $s.slug == $slug} | get 0?)
$size.price_monthly
}
def mock_cache_is_valid [cache: record, ttl: int = 3600] {
true
}
export def test_1 [] { let cache = (mock_pricing_cache_init); assert (($cache.timestamp > 0)) }
export def test_2 [] { let cache = (mock_pricing_cache_init); assert (($cache.sizes | length) > 0) }
export def test_3 [] { let cache = (mock_pricing_cache_init); assert (($cache.regions | length) > 0) }
export def test_4 [] { let cache = (mock_pricing_cache_init); assert (($cache.ttl > 0)) }
export def test_5 [] { let cache = (mock_pricing_cache_init); let valid = (mock_cache_is_valid $cache 3600); assert equal $valid true }
export def test_6 [] { let price = (mock_get_size_price "s-1vcpu-1gb-30gb"); assert equal $price 4.0 }
export def test_7 [] { let price = (mock_get_size_price "s-3vcpu-1gb-60gb"); assert equal $price 12.0 }
export def test_8 [] { let price = (mock_get_size_price "s-1vcpu-1gb-30gb"); assert ($price > 0) }
export def test_9 [] { let cache = (mock_pricing_cache_init); let size = ($cache.sizes | get 0); assert (($size | get -o price_monthly | is-not-empty)) }
export def test_10 [] { let cache = (mock_pricing_cache_init); let size = ($cache.sizes | get 0); let monthly = $size.price_monthly; let hourly = $size.price_hourly; let calculated = ($hourly * 730); assert (($monthly - $calculated | math abs) < 1.0) }
export def test_11 [] { let cache = (mock_pricing_cache_init); assert (($cache.regions | all {|r| $r.available == true})) }
export def test_12 [] { let old_cache = (mock_pricing_cache_init); let old_ts = $old_cache.timestamp; let new_cache = {timestamp: 1704787200, ttl: 3600, sizes: $old_cache.sizes, regions: $old_cache.regions}; assert ($new_cache.timestamp >= $old_ts) }
export def run_pricing_tests [] {
print " ✓ test_pricing_cache_init" ; test_1
print " ✓ test_pricing_cache_has_sizes" ; test_2
print " ✓ test_pricing_cache_has_regions" ; test_3
print " ✓ test_pricing_cache_has_ttl" ; test_4
print " ✓ test_pricing_cache_is_valid" ; test_5
print " ✓ test_pricing_get_size_price_standard" ; test_6
print " ✓ test_pricing_get_size_price_large" ; test_7
print " ✓ test_pricing_size_price_is_numeric" ; test_8
print " ✓ test_pricing_cache_sizes_have_pricing" ; test_9
print " ✓ test_pricing_monthly_vs_hourly" ; test_10
print " ✓ test_pricing_cache_regions_available" ; test_11
print " ✓ test_pricing_cache_refresh" ; test_12
{total: 12, passed: 12, failed: 0}
}