Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/flexo_syside_lib/committer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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}")
Expand Down
79 changes: 79 additions & 0 deletions tests/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
}
Loading