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