URL: http://github.com/python-gitlab/python-gitlab/pull/3381.patch
et_mixin_without_id_raises_error_when_no_parent_ref(gl): + class M(GetMixin, MockManagerWithRefAttr): + pass + + mgr = M(gl) + with pytest.raises(ValueError, match="id is required"): + mgr.get() + + +@responses.activate +def test_update_mixin_without_id_no_parent_ref(gl): + class M(UpdateMixin, FakeManager): + _update_method = UpdateMethod.POST + _obj_cls = FakeObject + + url = "http://localhost/api/v4/tests" + responses.add(method=responses.POST, url=url, json={}, status=200) + + mgr = M(gl) + result = mgr.update(new_data={"foo": "bar"}) + assert isinstance(result, dict) + assert responses.assert_call_count(url, 1) is True diff --git a/tests/unit/objects/test_merge_trains.py b/tests/unit/objects/test_merge_trains.py index f58d04422..0cfe0e51e 100644 --- a/tests/unit/objects/test_merge_trains.py +++ b/tests/unit/objects/test_merge_trains.py @@ -3,15 +3,17 @@ https://docs.gitlab.com/ee/api/merge_trains.html """ +from copy import deepcopy + import pytest import responses -from gitlab.v4.objects import ProjectMergeTrain +from gitlab.v4.objects import ProjectMergeTrain, ProjectMergeTrainMergeRequest mr_content = { "id": 110, "merge_request": { - "id": 1, + "id": 273, "iid": 1, "project_id": 3, "title": "Test merge train", @@ -46,6 +48,10 @@ "duration": 70, } +merge_train_update = deepcopy(mr_content) +merge_train_update["merge_request"]["iid"] = 4 +merge_train_update["pipeline"]["sha"] = "ef33a3zxc3" + @pytest.fixture def resp_list_merge_trains(): @@ -60,7 +66,62 @@ def resp_list_merge_trains(): yield rsps +@pytest.fixture +def resp_merge_trains_merge_request_get(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.GET, + url="http://localhost/api/v4/projects/1/merge_trains/merge_requests/1", + json=mr_content, + content_type="application/json", + status=200, + ) + yield rsps + + +@pytest.fixture +def resp_merge_trains_merge_request_post(): + with responses.RequestsMock() as rsps: + rsps.add( + method=responses.POST, + url="http://localhost/api/v4/projects/1/merge_trains/merge_requests/4", + json=[merge_train_update], + content_type="application/json", + status=200, + match=[responses.matchers.json_params_matcher({"sha": "ef33a3zxc3"})], + ) + yield rsps + + def test_list_project_merge_requests(project, resp_list_merge_trains): merge_trains = project.merge_trains.list() assert isinstance(merge_trains[0], ProjectMergeTrain) assert merge_trains[0].id == mr_content["id"] + + +def test_merge_trains_status_merge_request( + project, resp_merge_trains_merge_request_get +): + merge_train_mr: ProjectMergeTrainMergeRequest = project.merge_trains.get( + 1, lazy=True + ).merge_requests.get(1) + assert isinstance(merge_train_mr, ProjectMergeTrainMergeRequest) + assert merge_train_mr.get_id() == 110 + assert merge_train_mr.merge_request["iid"] == mr_content["merge_request"]["iid"] + assert merge_train_mr.pipeline.get("status") == mr_content["pipeline"]["status"] + + +def test_merge_train_add_merge_request(project, resp_merge_trains_merge_request_post): + merge_train: ProjectMergeTrain = project.merge_trains.get(1, lazy=True) + merge_requests_update = merge_train.merge_requests.update( + 4, new_data={"sha": "ef33a3zxc3"} + ) + assert isinstance(merge_train, ProjectMergeTrain) + assert ( + merge_requests_update[0]["pipeline"]["sha"] + == merge_train_update["pipeline"]["sha"] + ) + assert ( + merge_requests_update[0]["merge_request"]["iid"] + == merge_train_update["merge_request"]["iid"] + )Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: