From bc9c0900b77f55ba05e61aa5d2a748b7ff387d0f Mon Sep 17 00:00:00 2001 From: wobrschalek Date: Mon, 30 Mar 2026 12:59:48 -0700 Subject: [PATCH] add replace_model, delete_model flags --- src/flexo_syside_lib/committer.py | 4 +- tests/test_core.py | 79 +++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/src/flexo_syside_lib/committer.py b/src/flexo_syside_lib/committer.py index d70c976..6f0adbf 100644 --- a/src/flexo_syside_lib/committer.py +++ b/src/flexo_syside_lib/committer.py @@ -88,6 +88,8 @@ def commit_sysml_to_flexo( project_id: Optional[str] = None, flexo_url: Optional[str] = None, verbose: bool = True, + delete_project_data: bool = False, + replace_model: bool = False, ) -> Dict[str, object]: """ Commit SysMLv2 textual content to a Flexo SysIDE server project. @@ -164,7 +166,7 @@ def commit_sysml_to_flexo( # --- Commit the change --- try: - commit_response, commit_id = commit_to_project(client, proj_id, change_payload_str) + commit_response, commit_id = commit_to_project(client, proj_id, change_payload_str, delete_project_data = delete_project_data, replace_model = replace_model) if verbose: print(f"[Flexo] Commit response: {commit_response}") print(f"[Flexo] Commit successful, ID: {commit_id}") diff --git a/tests/test_core.py b/tests/test_core.py index b7e5f13..1dd1212 100644 --- a/tests/test_core.py +++ b/tests/test_core.py @@ -8,8 +8,11 @@ import os from unittest.mock import Mock, patch, MagicMock import json, pprint +import importlib +import sys import syside import pathlib +import types from flexo_syside_lib.core import convert_sysml_file_textual_to_json, convert_sysml_string_textual_to_json, convert_json_to_sysml_textual from pathlib import Path @@ -466,3 +469,79 @@ def test_utility_functions_work_without_syside(self): # Test that the function works regardless of SysIDE state result = _replace_none_with_empty({"test": None}) assert result == {"test": ""} + + +class TestCommitterRegression: + """Regression tests for Flexo commit argument forwarding.""" + + @staticmethod + def _import_committer_module(): + mock_sysmlv2_client = types.ModuleType("sysmlv2_client") + mock_sysmlv2_client.SysMLV2Client = Mock() + + mock_api_lib = types.ModuleType("sysml_api.api_lib") + mock_api_lib.create_sysml_project = Mock() + mock_api_lib.get_project_by_name = Mock() + mock_api_lib.commit_to_project = Mock() + + mock_sysml_api = types.ModuleType("sysml_api") + mock_sysml_api.api_lib = mock_api_lib + + with patch.dict( + "sys.modules", + { + "sysmlv2_client": mock_sysmlv2_client, + "sysml_api": mock_sysml_api, + "sysml_api.api_lib": mock_api_lib, + }, + ): + sys.modules.pop("flexo_syside_lib.committer", None) + return importlib.import_module("flexo_syside_lib.committer") + + def test_commit_sysml_to_flexo_forwards_default_commit_flags(self): + committer = self._import_committer_module() + + with patch.object(committer, "SysMLV2Client", return_value=Mock()), \ + patch.object(committer, "convert_sysml_string_textual_to_json", return_value=('{"change": 1}', "[]")), \ + patch.object(committer, "get_project_by_name", return_value=({"name": "Demo"}, "project-123")), \ + patch.object(committer, "commit_to_project", return_value=({"status": "ok"}, "commit-123")) as mock_commit: + result = committer.commit_sysml_to_flexo( + sysml_output="package Demo {}", + project_name="Demo", + api_key="token", + verbose=False, + ) + + assert result["project_id"] == "project-123" + assert result["commit_id"] == "commit-123" + mock_commit.assert_called_once() + assert mock_commit.call_args.args[1:] == ("project-123", '{"change": 1}') + assert mock_commit.call_args.kwargs == { + "delete_project_data": False, + "replace_model": False, + } + + def test_commit_sysml_to_flexo_forwards_explicit_commit_flags(self): + committer = self._import_committer_module() + + with patch.object(committer, "SysMLV2Client", return_value=Mock()), \ + patch.object(committer, "convert_sysml_string_textual_to_json", return_value=('{"change": 1}', "[]")), \ + patch.object(committer, "get_project_by_name", return_value=({"name": "Demo"}, "project-123")), \ + patch.object(committer, "commit_to_project", return_value=({"status": "ok"}, "commit-123")) as mock_commit: + result = committer.commit_sysml_to_flexo( + sysml_output="package Demo {}", + project_name="Demo", + api_key="token", + verbose=False, + delete_project_data=True, + replace_model=True, + ) + + assert result["project_id"] == "project-123" + assert result["commit_id"] == "commit-123" + mock_commit.assert_called_once() + assert mock_commit.call_args.args[1:] == ("project-123", '{"change": 1}') + assert mock_commit.call_args.kwargs == { + "delete_project_data": True, + "replace_model": True, + }