"""Tests for dashboard.openstack_utils.flavor.""" from unittest.mock import MagicMock from django.test import TestCase from dashboard.openstack_utils.flavor import get_flavor_list def make_mock_server(flavor_id): """Create a mock server object with flavor['id'].""" s = MagicMock() s.flavor = {"id": flavor_id} return s class GetFlavorListTest(TestCase): """Tests for get_flavor_list.""" def test_returns_first_second_third_common_flavor_keys(self): mock_conn = MagicMock() mock_conn.compute.servers.return_value = [ make_mock_server("m1.small"), make_mock_server("m1.small"), make_mock_server("m1.medium"), ] result = get_flavor_list(connection=mock_conn) self.assertIn("first_common_flavor", result) self.assertIn("second_common_flavor", result) self.assertIn("third_common_flavor", result) def test_most_common_flavor_first(self): mock_conn = MagicMock() mock_conn.compute.servers.return_value = [ make_mock_server("m1.large"), make_mock_server("m1.small"), make_mock_server("m1.small"), make_mock_server("m1.small"), ] result = get_flavor_list(connection=mock_conn) self.assertEqual(result["first_common_flavor"]["name"], "m1.small") self.assertEqual(result["first_common_flavor"]["count"], 3) self.assertEqual(result["second_common_flavor"]["name"], "m1.large") self.assertEqual(result["second_common_flavor"]["count"], 1) self.assertEqual(result["third_common_flavor"]["name"], "—") self.assertEqual(result["third_common_flavor"]["count"], 0) def test_empty_servers_uses_placeholder_for_all(self): mock_conn = MagicMock() mock_conn.compute.servers.return_value = [] result = get_flavor_list(connection=mock_conn) placeholder = {"name": "—", "count": 0} self.assertEqual(result["first_common_flavor"], placeholder) self.assertEqual(result["second_common_flavor"], placeholder) self.assertEqual(result["third_common_flavor"], placeholder) def test_skips_servers_without_flavor_id(self): mock_conn = MagicMock() s_with_id = make_mock_server("m1.small") s_without = MagicMock() s_without.flavor = {} # no 'id' mock_conn.compute.servers.return_value = [s_with_id, s_without] result = get_flavor_list(connection=mock_conn) self.assertEqual(result["first_common_flavor"]["name"], "m1.small") self.assertEqual(result["first_common_flavor"]["count"], 1)