33from unittest .mock import MagicMock
44from unittest .mock import patch
55
6- from understack_workflows .main .resync_ironic_to_nautobot import SyncResult
76from understack_workflows .main .resync_ironic_to_nautobot import argument_parser
87from understack_workflows .main .resync_ironic_to_nautobot import main
98from understack_workflows .main .resync_ironic_to_nautobot import sync_nodes
10-
11-
12- class TestSyncResult :
13- """Test cases for SyncResult dataclass."""
14-
15- def test_defaults (self ):
16- result = SyncResult ()
17- assert result .total == 0
18- assert result .failed == 0
19- assert result .succeeded == 0
20-
21- def test_succeeded_calculation (self ):
22- result = SyncResult (total = 10 , failed = 3 )
23- assert result .succeeded == 7
24-
25- def test_all_failed (self ):
26- result = SyncResult (total = 5 , failed = 5 )
27- assert result .succeeded == 0
28-
29- def test_none_failed (self ):
30- result = SyncResult (total = 5 , failed = 0 )
31- assert result .succeeded == 5
9+ from understack_workflows .resync import SyncResult
3210
3311
3412class TestArgumentParser :
@@ -37,18 +15,7 @@ class TestArgumentParser:
3715 def test_default_args (self ):
3816 parser = argument_parser ()
3917 args = parser .parse_args ([])
40- assert args .node is None
41- assert args .dry_run is False
42-
43- def test_node_arg (self ):
44- parser = argument_parser ()
45- args = parser .parse_args (["--node" , "test-uuid" ])
46- assert args .node == "test-uuid"
47-
48- def test_dry_run_arg (self ):
49- parser = argument_parser ()
50- args = parser .parse_args (["--dry-run" ])
51- assert args .dry_run is True
18+ assert args .nautobot_url is not None or args .nautobot_token is None
5219
5320
5421class TestSyncNodes :
@@ -81,15 +48,15 @@ def test_sync_single_node(self, mock_sync, mock_ironic_class):
8148 mock_ironic = MagicMock ()
8249 mock_ironic_class .return_value = mock_ironic
8350 mock_node = MagicMock (uuid = "uuid-1" , name = "node-1" )
84- mock_ironic .get_node .return_value = mock_node
51+ mock_ironic .list_nodes .return_value = [ mock_node ]
8552 mock_sync .return_value = 0
8653
8754 nautobot = MagicMock ()
88- result = sync_nodes (nautobot , node_uuid = "uuid-1" )
55+ result = sync_nodes (nautobot )
8956
9057 assert result .total == 1
9158 assert result .failed == 0
92- mock_ironic .get_node . assert_called_once_with ( "uuid-1" )
59+ mock_ironic .list_nodes . assert_called_once ( )
9360
9461 @patch ("understack_workflows.main.resync_ironic_to_nautobot.IronicClient" )
9562 @patch (
@@ -111,33 +78,30 @@ def test_sync_with_failures(self, mock_sync, mock_ironic_class):
11178 assert result .succeeded == 1
11279
11380 @patch ("understack_workflows.main.resync_ironic_to_nautobot.IronicClient" )
114- def test_dry_run_skips_sync (self , mock_ironic_class ):
81+ @patch (
82+ "understack_workflows.main.resync_ironic_to_nautobot.sync_device_to_nautobot"
83+ )
84+ def test_sync_no_nodes (self , mock_sync , mock_ironic_class ):
11585 mock_ironic = MagicMock ()
11686 mock_ironic_class .return_value = mock_ironic
117- mock_node = MagicMock (uuid = "uuid-1" , name = "node-1" )
118- mock_ironic .list_nodes .return_value = [mock_node ]
87+ mock_ironic .list_nodes .return_value = []
11988
12089 nautobot = MagicMock ()
121- result = sync_nodes (nautobot , dry_run = True )
90+ result = sync_nodes (nautobot )
12291
123- assert result .total == 1
92+ assert result .total == 0
12493 assert result .failed == 0
12594
12695
12796class TestMain :
12897 """Test cases for main function."""
12998
13099 @patch ("understack_workflows.main.resync_ironic_to_nautobot.sync_nodes" )
131- @patch ("understack_workflows.main.resync_ironic_to_nautobot.pynautobot" )
132- @patch ("understack_workflows.main.resync_ironic_to_nautobot.credential" )
100+ @patch ("understack_workflows.main.resync_ironic_to_nautobot.get_nautobot_client" )
133101 @patch ("understack_workflows.main.resync_ironic_to_nautobot.setup_logger" )
134102 @patch ("understack_workflows.main.resync_ironic_to_nautobot.argument_parser" )
135- def test_main_success (
136- self , mock_parser , mock_logger , mock_cred , mock_pynb , mock_sync
137- ):
103+ def test_main_success (self , mock_parser , mock_logger , mock_get_nb , mock_sync ):
138104 mock_args = MagicMock ()
139- mock_args .nautobot_token = "token"
140- mock_args .nautobot_url = "http://nautobot"
141105 mock_args .node = None
142106 mock_args .dry_run = False
143107 mock_parser .return_value .parse_args .return_value = mock_args
@@ -148,16 +112,11 @@ def test_main_success(
148112 assert result == 0
149113
150114 @patch ("understack_workflows.main.resync_ironic_to_nautobot.sync_nodes" )
151- @patch ("understack_workflows.main.resync_ironic_to_nautobot.pynautobot" )
152- @patch ("understack_workflows.main.resync_ironic_to_nautobot.credential" )
115+ @patch ("understack_workflows.main.resync_ironic_to_nautobot.get_nautobot_client" )
153116 @patch ("understack_workflows.main.resync_ironic_to_nautobot.setup_logger" )
154117 @patch ("understack_workflows.main.resync_ironic_to_nautobot.argument_parser" )
155- def test_main_with_failures (
156- self , mock_parser , mock_logger , mock_cred , mock_pynb , mock_sync
157- ):
118+ def test_main_with_failures (self , mock_parser , mock_logger , mock_get_nb , mock_sync ):
158119 mock_args = MagicMock ()
159- mock_args .nautobot_token = "token"
160- mock_args .nautobot_url = "http://nautobot"
161120 mock_args .node = None
162121 mock_args .dry_run = False
163122 mock_parser .return_value .parse_args .return_value = mock_args
0 commit comments