Skip to content

Commit e4db8f8

Browse files
committed
handle replace model case
1 parent 3411d13 commit e4db8f8

File tree

2 files changed

+65
-7
lines changed

2 files changed

+65
-7
lines changed

src/sysmlv2_client/client.py

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,21 +126,30 @@ def get_owned_elements(self, project_id: str, element_id: str, commit_id: str =
126126
else:
127127
return []
128128

129-
def create_commit(self, project_id: str, commit_data: Dict[str, Any], branch_id:str = None) -> Dict[str, Any]:
130-
if branch_id is None:
131-
# this takes the default branch
132-
endpoint = f"/projects/{project_id}/commits"
133-
else:
134-
endpoint = f"/projects/{project_id}/commits?branchId={branch_id}"
129+
def create_commit(self, project_id: str, commit_data: Dict[str, Any], branch_id:str = None, replace:bool = False) -> Dict[str, Any]:
130+
params = []
131+
132+
if replace:
133+
params.append("replace=true")
134+
135+
if branch_id is not None:
136+
params.append(f"branchId={branch_id}")
137+
138+
endpoint = f"/projects/{project_id}/commits"
139+
if params:
140+
endpoint += "?" + "&".join(params)
141+
135142
#print (">>> DEBUG create_commit")
136143
#print (endpoint)
137144
#print (commit_data)
145+
138146
return self._request(
139147
method="POST",
140148
endpoint=endpoint,
141149
data=commit_data,
142150
expected_status=200
143151
)
152+
144153
def get_commit_by_id(self, project_id: str, commit_id: str) -> Dict[str, Any]:
145154
endpoint = f"/projects/{project_id}/commits/{commit_id}"
146155
return self._request(method="GET", endpoint=endpoint, expected_status=200)

tests/test_client.py

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,55 @@ def test_create_commit_success(client, requests_mock):
245245
assert requests_mock.last_request.method == "POST"
246246
assert requests_mock.last_request.json() == request_data
247247

248+
def test_create_commit_with_branch_id(client, requests_mock):
249+
"""Tests commit creation with a branch query parameter."""
250+
branch_id = "branch_123"
251+
mock_url = f"{TEST_BASE_URL}/projects/{TEST_PROJECT_ID}/commits?branchId={branch_id}"
252+
request_data = {"message": "Branch commit", "parentCommitId": None}
253+
response_data = {"id": "branch_commit_id", **request_data}
254+
requests_mock.post(mock_url, json=response_data, status_code=200)
255+
256+
created_commit = client.create_commit(TEST_PROJECT_ID, request_data, branch_id=branch_id)
257+
258+
assert created_commit == response_data
259+
assert requests_mock.last_request.url == mock_url
260+
assert requests_mock.last_request.method == "POST"
261+
assert requests_mock.last_request.json() == request_data
262+
263+
def test_create_commit_with_replace(client, requests_mock):
264+
"""Tests commit creation with the replace query parameter."""
265+
mock_url = f"{TEST_BASE_URL}/projects/{TEST_PROJECT_ID}/commits?replace=true"
266+
request_data = {"message": "Replace commit", "parentCommitId": None}
267+
response_data = {"id": "replace_commit_id", **request_data}
268+
requests_mock.post(mock_url, json=response_data, status_code=200)
269+
270+
created_commit = client.create_commit(TEST_PROJECT_ID, request_data, replace=True)
271+
272+
assert created_commit == response_data
273+
assert requests_mock.last_request.url == mock_url
274+
assert requests_mock.last_request.method == "POST"
275+
assert requests_mock.last_request.json() == request_data
276+
277+
def test_create_commit_with_branch_id_and_replace(client, requests_mock):
278+
"""Tests commit creation with both branchId and replace query parameters."""
279+
branch_id = "branch_123"
280+
mock_url = f"{TEST_BASE_URL}/projects/{TEST_PROJECT_ID}/commits?replace=true&branchId={branch_id}"
281+
request_data = {"message": "Replace branch commit", "parentCommitId": None}
282+
response_data = {"id": "replace_branch_commit_id", **request_data}
283+
requests_mock.post(mock_url, json=response_data, status_code=200)
284+
285+
created_commit = client.create_commit(
286+
TEST_PROJECT_ID,
287+
request_data,
288+
branch_id=branch_id,
289+
replace=True,
290+
)
291+
292+
assert created_commit == response_data
293+
assert requests_mock.last_request.url == mock_url
294+
assert requests_mock.last_request.method == "POST"
295+
assert requests_mock.last_request.json() == request_data
296+
248297
def test_create_commit_bad_request(client, requests_mock):
249298
"""Tests 400 Bad Request during commit creation."""
250299
mock_url = f"{TEST_BASE_URL}/projects/{TEST_PROJECT_ID}/commits"
@@ -460,4 +509,4 @@ def test_list_relationships_element_not_found(client, requests_mock):
460509
mock_url = f"{TEST_BASE_URL}/projects/{TEST_PROJECT_ID}/commits/{TEST_COMMIT_ID}/elements/invalid_element/relationships?direction=both"
461510
requests_mock.get(mock_url, status_code=404)
462511
with pytest.raises(SysMLV2NotFoundError):
463-
client.list_relationships(TEST_PROJECT_ID, "invalid_element", TEST_COMMIT_ID)
512+
client.list_relationships(TEST_PROJECT_ID, "invalid_element", TEST_COMMIT_ID)

0 commit comments

Comments
 (0)