Merge pull request 'chore: remove QuickNav addon from build and loader (#343)' (#347) from chore/remove-quicknav into main
Some checks failed
Build and Test / build (push) Has been cancelled
Some checks failed
Build and Test / build (push) Has been cancelled
Reviewed-on: #347
This commit was merged in pull request #347.
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -22,6 +22,3 @@
|
||||
path = mods/solver
|
||||
url = https://git.kindred-systems.com/kindred/solver.git
|
||||
branch = main
|
||||
[submodule "mods/quicknav"]
|
||||
path = mods/quicknav
|
||||
url = https://git.kindred-systems.com/kindred/quicknav.git
|
||||
|
||||
Submodule mods/quicknav deleted from 658a427132
@@ -85,22 +85,6 @@ install(
|
||||
mods/sdk
|
||||
)
|
||||
|
||||
# Install QuickNav addon
|
||||
install(
|
||||
DIRECTORY
|
||||
${CMAKE_SOURCE_DIR}/mods/quicknav/quicknav
|
||||
DESTINATION
|
||||
mods/quicknav
|
||||
)
|
||||
install(
|
||||
FILES
|
||||
${CMAKE_SOURCE_DIR}/mods/quicknav/package.xml
|
||||
${CMAKE_SOURCE_DIR}/mods/quicknav/Init.py
|
||||
${CMAKE_SOURCE_DIR}/mods/quicknav/InitGui.py
|
||||
DESTINATION
|
||||
mods/quicknav
|
||||
)
|
||||
|
||||
# Install Kindred Solver addon
|
||||
install(
|
||||
DIRECTORY
|
||||
|
||||
@@ -89,8 +89,12 @@ _silo_client_mock.CATEGORY_NAMES = {
|
||||
"SW": "Software",
|
||||
}
|
||||
_silo_client_mock.parse_part_number = mock.MagicMock(return_value=("ME", "001"))
|
||||
_silo_client_mock.get_category_folder_name = mock.MagicMock(return_value="ME_Mechanical")
|
||||
_silo_client_mock.sanitize_filename = mock.MagicMock(side_effect=lambda s: s.replace(" ", "_"))
|
||||
_silo_client_mock.get_category_folder_name = mock.MagicMock(
|
||||
return_value="ME_Mechanical"
|
||||
)
|
||||
_silo_client_mock.sanitize_filename = mock.MagicMock(
|
||||
side_effect=lambda s: s.replace(" ", "_")
|
||||
)
|
||||
_silo_client_mock.SiloClient = mock.MagicMock()
|
||||
_silo_client_mock.SiloSettings = type("SiloSettings", (), {})
|
||||
sys.modules["silo_client"] = _silo_client_mock
|
||||
@@ -101,39 +105,25 @@ sys.path.insert(0, str(_REPO_ROOT / "src" / "Mod" / "Create"))
|
||||
sys.path.insert(0, str(_REPO_ROOT / "mods" / "sdk"))
|
||||
sys.path.insert(0, str(_REPO_ROOT / "mods" / "ztools" / "ztools"))
|
||||
sys.path.insert(0, str(_REPO_ROOT / "mods" / "silo" / "freecad"))
|
||||
sys.path.insert(0, str(_REPO_ROOT / "mods" / "quicknav"))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Now import the modules under test
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
import silo_origin # noqa: E402
|
||||
import silo_start # noqa: E402
|
||||
from silo_commands import _safe_float # noqa: E402
|
||||
from update_checker import _parse_version, _should_check # noqa: E402
|
||||
|
||||
|
||||
# For datum_commands, the module registers Gui.addCommand at import time.
|
||||
# We need Gui.addCommand to be a no-op mock (already is via MagicMock).
|
||||
from ztools.commands.datum_commands import ( # noqa: E402
|
||||
DatumCreatorTaskPanel,
|
||||
SelectionItem,
|
||||
)
|
||||
|
||||
from ztools.commands.spreadsheet_commands import column_to_index # noqa: E402
|
||||
|
||||
from silo_commands import _safe_float # noqa: E402
|
||||
|
||||
import silo_start # noqa: E402
|
||||
import silo_origin # noqa: E402
|
||||
|
||||
from quicknav.workbench_map import ( # noqa: E402
|
||||
WORKBENCH_SLOTS,
|
||||
WORKBENCH_GROUPINGS,
|
||||
get_workbench_slot,
|
||||
get_groupings,
|
||||
get_grouping,
|
||||
get_command,
|
||||
)
|
||||
|
||||
|
||||
# ===================================================================
|
||||
# Test: update_checker._parse_version
|
||||
# ===================================================================
|
||||
@@ -564,110 +554,6 @@ class TestDatumModes(unittest.TestCase):
|
||||
self.assertEqual(len(points), 5)
|
||||
|
||||
|
||||
# ===================================================================
|
||||
# Test: quicknav workbench_map
|
||||
# ===================================================================
|
||||
|
||||
|
||||
class TestWorkbenchMap(unittest.TestCase):
|
||||
"""Tests for quicknav.workbench_map data and helpers."""
|
||||
|
||||
def test_all_slots_defined(self):
|
||||
for n in range(1, 6):
|
||||
slot = WORKBENCH_SLOTS.get(n)
|
||||
self.assertIsNotNone(slot, f"Slot {n} missing from WORKBENCH_SLOTS")
|
||||
|
||||
def test_slot_keys(self):
|
||||
for n, slot in WORKBENCH_SLOTS.items():
|
||||
self.assertIn("key", slot)
|
||||
self.assertIn("class_name", slot)
|
||||
self.assertIn("display", slot)
|
||||
self.assertIsInstance(slot["key"], str)
|
||||
self.assertIsInstance(slot["class_name"], str)
|
||||
self.assertIsInstance(slot["display"], str)
|
||||
|
||||
def test_each_slot_has_groupings(self):
|
||||
for n, slot in WORKBENCH_SLOTS.items():
|
||||
groupings = WORKBENCH_GROUPINGS.get(slot["key"])
|
||||
self.assertIsNotNone(groupings, f"No groupings for workbench key '{slot['key']}'")
|
||||
self.assertGreater(len(groupings), 0, f"Empty groupings for slot {n}")
|
||||
|
||||
def test_max_nine_groupings_per_workbench(self):
|
||||
for wb_key, groupings in WORKBENCH_GROUPINGS.items():
|
||||
self.assertLessEqual(len(groupings), 9, f"More than 9 groupings for '{wb_key}'")
|
||||
|
||||
def test_max_nine_commands_per_grouping(self):
|
||||
for wb_key, groupings in WORKBENCH_GROUPINGS.items():
|
||||
for i, grp in enumerate(groupings):
|
||||
self.assertLessEqual(
|
||||
len(grp["commands"]),
|
||||
9,
|
||||
f"More than 9 commands in '{wb_key}' grouping {i}",
|
||||
)
|
||||
|
||||
def test_command_tuples_are_str_str(self):
|
||||
for wb_key, groupings in WORKBENCH_GROUPINGS.items():
|
||||
for i, grp in enumerate(groupings):
|
||||
self.assertIn("name", grp)
|
||||
self.assertIn("commands", grp)
|
||||
for j, cmd in enumerate(grp["commands"]):
|
||||
self.assertIsInstance(cmd, tuple, f"{wb_key}[{i}][{j}] not tuple")
|
||||
self.assertEqual(len(cmd), 2, f"{wb_key}[{i}][{j}] not length 2")
|
||||
self.assertIsInstance(cmd[0], str, f"{wb_key}[{i}][{j}][0] not str")
|
||||
self.assertIsInstance(cmd[1], str, f"{wb_key}[{i}][{j}][1] not str")
|
||||
|
||||
def test_get_workbench_slot_valid(self):
|
||||
for n in range(1, 6):
|
||||
slot = get_workbench_slot(n)
|
||||
self.assertIsNotNone(slot)
|
||||
self.assertEqual(slot, WORKBENCH_SLOTS[n])
|
||||
|
||||
def test_get_workbench_slot_invalid(self):
|
||||
self.assertIsNone(get_workbench_slot(0))
|
||||
self.assertIsNone(get_workbench_slot(6))
|
||||
self.assertIsNone(get_workbench_slot(99))
|
||||
|
||||
def test_get_groupings_valid(self):
|
||||
for slot in WORKBENCH_SLOTS.values():
|
||||
result = get_groupings(slot["key"])
|
||||
self.assertIsNotNone(result)
|
||||
self.assertIsInstance(result, list)
|
||||
|
||||
def test_get_groupings_invalid(self):
|
||||
self.assertEqual(get_groupings("nonexistent"), [])
|
||||
|
||||
def test_get_grouping_valid(self):
|
||||
for wb_key, groupings in WORKBENCH_GROUPINGS.items():
|
||||
for i in range(len(groupings)):
|
||||
grp = get_grouping(wb_key, i)
|
||||
self.assertIsNotNone(grp)
|
||||
self.assertEqual(grp, groupings[i])
|
||||
|
||||
def test_get_grouping_invalid_index(self):
|
||||
wb_key = WORKBENCH_SLOTS[1]["key"]
|
||||
self.assertIsNone(get_grouping(wb_key, 99))
|
||||
self.assertIsNone(get_grouping(wb_key, -1))
|
||||
|
||||
def test_get_grouping_invalid_key(self):
|
||||
self.assertIsNone(get_grouping("nonexistent", 0))
|
||||
|
||||
def test_get_command_valid(self):
|
||||
for wb_key, groupings in WORKBENCH_GROUPINGS.items():
|
||||
for gi, grp in enumerate(groupings):
|
||||
for ci in range(len(grp["commands"])):
|
||||
cmd_id = get_command(wb_key, gi, ci + 1)
|
||||
self.assertIsNotNone(cmd_id, f"None for {wb_key}[{gi}][{ci + 1}]")
|
||||
self.assertEqual(cmd_id, grp["commands"][ci][0])
|
||||
|
||||
def test_get_command_invalid_number(self):
|
||||
wb_key = WORKBENCH_SLOTS[1]["key"]
|
||||
self.assertIsNone(get_command(wb_key, 0, 0))
|
||||
self.assertIsNone(get_command(wb_key, 0, 99))
|
||||
|
||||
def test_get_command_invalid_workbench(self):
|
||||
self.assertIsNone(get_command("nonexistent", 0, 1))
|
||||
|
||||
|
||||
# ===================================================================
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user