@@ -361,3 +361,90 @@ def test_get_node_returns_none_when_not_found():
361361 network ._healthy_nodes = [node ]
362362
363363 assert network ._get_node ("0.0.999" ) is None
364+
365+
366+ # Tests parse_mirror_address
367+ @pytest .mark .parametrize (
368+ "mirror_addr,expected_host,expected_port" ,
369+ [
370+ ("localhost:5551" , "localhost" , 5551 ),
371+ ("127.0.0.1:8080" , "127.0.0.1" , 8080 ),
372+ ("mirror.hedera.com:443" , "mirror.hedera.com" , 443 ),
373+ ("justhost" , "justhost" , 443 ), # no port defaults to 443
374+ ("badport:abc" , "badport" , 443 ), # invalid port defaults to 443
375+ ],
376+ )
377+ def test_parse_mirror_address (mirror_addr , expected_host , expected_port ):
378+ """Test that _parse_mirror_address correctly splits mirror_address into host and port."""
379+ network = Network ("testnet" , mirror_address = mirror_addr )
380+ host , port = network ._parse_mirror_address ()
381+ assert host == expected_host
382+ assert port == expected_port
383+
384+
385+ # Tests _determine_scheme_and_port
386+ @pytest .mark .parametrize (
387+ "host,port,expected_scheme,expected_port" ,
388+ [
389+ ("localhost" , 443 , "http" , 8080 ),
390+ ("127.0.0.1" , 80 , "http" , 80 ),
391+ ("127.0.0.1" , 5000 , "http" , 5000 ),
392+ ("hedera.com" , 5600 , "https" , 443 ),
393+ ("hedera.com" , 443 , "https" , 443 ),
394+ ("hedera.com" , 8443 , "https" , 8443 ),
395+ ],
396+ )
397+ def test_determine_scheme_and_port (host , port , expected_scheme , expected_port ):
398+ """Test that _determine_scheme_and_port correctly computes the scheme (http/https)."""
399+ network = Network ("testnet" )
400+ scheme , out_port = network ._determine_scheme_and_port (host , port )
401+ assert out_port == expected_port
402+ assert scheme == expected_scheme
403+
404+
405+ # Tests for _build_rest_url
406+ @pytest .mark .parametrize (
407+ "scheme,host,port,expected_url" ,
408+ [
409+ ("https" , "hedera.com" , 443 , "https://hedera.com/api/v1" ),
410+ ("https" , "hedera.com" , 8443 , "https://hedera.com:8443/api/v1" ),
411+ ("http" , "localhost" , 80 , "http://localhost/api/v1" ),
412+ ("http" , "localhost" , 8080 , "http://localhost:8080/api/v1" ),
413+ ],
414+ )
415+ def test_build_rest_url (scheme , host , port , expected_url ):
416+ """Test that _build_rest_url constructs the correct REST API URL."""
417+ network = Network ("testnet" )
418+ url = network ._build_rest_url (scheme , host , port )
419+ assert url == expected_url
420+
421+
422+ def test_get_mirror_rest_url_fallback ():
423+ """Test get_mirror_rest_url fallback behavior when network is not in MIRROR_NODE_URLS."""
424+ # Custom network with no entry in MIRROR_NODE_URLS
425+ network = Network ("customnet" , mirror_address = "localhost:1234" )
426+
427+ scheme , port = network ._determine_scheme_and_port (* network ._parse_mirror_address ())
428+ expected_url = network ._build_rest_url (scheme , "localhost" , port )
429+
430+ assert network .get_mirror_rest_url () == expected_url
431+
432+
433+ @pytest .mark .unit
434+ def test_resolve_nodes_fallback_to_default (monkeypatch ):
435+ """Test that _resolve_nodes falls back to DEFAULT_NODES if no nodes are provided and mirror fetch returns empty."""
436+ network_name = "testnet"
437+ network = Network (network_name )
438+
439+ # Patch _fetch_nodes_from_mirror_node to return empty list
440+ monkeypatch .setattr (network , "_fetch_nodes_from_mirror_node" , lambda : [])
441+
442+ # Call _resolve_nodes with nodes=None should fallback to DEFAULT_NODES
443+ resolved_nodes = network ._resolve_nodes (None )
444+
445+ # DEFAULT_NODES for testnet has 4 entries (0..3)
446+ expected_count = len (network .DEFAULT_NODES [network_name ])
447+ assert isinstance (resolved_nodes , list )
448+ assert all (isinstance (n , _Node ) for n in resolved_nodes )
449+ assert len (resolved_nodes ) == expected_count
450+ assert resolved_nodes [0 ]._account_id == network .DEFAULT_NODES [network_name ][0 ][1 ]
0 commit comments