Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 761ff67

Browse files
isaac-philipJohnVillalovos
authored andcommitted
feat(functional): merge train -> merge request :> status fetch
1 parent 378a836 commit 761ff67

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

gitlab/v4/objects/merge_trains.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
1-
from gitlab.base import RESTObject
2-
from gitlab.mixins import ListMixin
1+
from gitlab.base import RESTManager, RESTObject
2+
from gitlab.mixins import CRUDMixin, GetMixin, ListMixin
3+
from gitlab.types import RequiredOptional
34

4-
__all__ = ["ProjectMergeTrain", "ProjectMergeTrainManager"]
5+
__all__ = [
6+
"ProjectMergeTrain",
7+
"ProjectMergeTrainManager",
8+
"ProjectMergeTrainMergeRequest",
9+
"ProjectMergeTrainMergeRequestManager",
10+
]
511

612

7-
class ProjectMergeTrain(RESTObject):
13+
class ProjectMergeTrainMergeRequest(RESTObject):
814
pass
915

1016

11-
class ProjectMergeTrainManager(ListMixin[ProjectMergeTrain]):
17+
class ProjectMergeTrainMergeRequestManager(CRUDMixin, RESTManager):
18+
_path = "/projects/{project_id}/merge_trains/merge_requests"
19+
_obj_cls = ProjectMergeTrainMergeRequest
20+
_from_parent_attrs = {"project_id": "project_id"}
21+
22+
_update_attrs = RequiredOptional(optional=("position",))
23+
24+
25+
class ProjectMergeTrain(RESTObject):
26+
merge_requests: ProjectMergeTrainMergeRequestManager
27+
28+
29+
class ProjectMergeTrainManager(GetMixin, ListMixin, RESTManager):
1230
_path = "/projects/{project_id}/merge_trains"
1331
_obj_cls = ProjectMergeTrain
1432
_from_parent_attrs = {"project_id": "id"}

gitlab/v4/objects/projects.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
ProjectApprovalRuleManager,
6565
)
6666
from .merge_requests import ProjectMergeRequestManager # noqa: F401
67-
from .merge_trains import ProjectMergeTrainManager # noqa: F401
67+
from .merge_trains import ProjectMergeTrainManager
6868
from .milestones import ProjectMilestoneManager # noqa: F401
6969
from .notes import ProjectNoteManager # noqa: F401
7070
from .notification_settings import ProjectNotificationSettingsManager # noqa: F401

tests/unit/objects/test_merge_trains.py

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import pytest
77
import responses
88

9-
from gitlab.v4.objects import ProjectMergeTrain
9+
from gitlab.v4.objects import ProjectMergeTrain, ProjectMergeTrainMergeRequest
1010

1111
mr_content = {
1212
"id": 110,
@@ -60,7 +60,31 @@ def resp_list_merge_trains():
6060
yield rsps
6161

6262

63+
@pytest.fixture
64+
def resp_merge_trains_merge_request_get():
65+
with responses.RequestsMock() as rsps:
66+
rsps.add(
67+
method=responses.GET,
68+
url="http://localhost/api/v4/projects/1/merge_trains/merge_requests/123",
69+
json=mr_content,
70+
content_type="application/json",
71+
status=200,
72+
)
73+
yield rsps
74+
75+
6376
def test_list_project_merge_requests(project, resp_list_merge_trains):
6477
merge_trains = project.merge_trains.list()
6578
assert isinstance(merge_trains[0], ProjectMergeTrain)
6679
assert merge_trains[0].id == mr_content["id"]
80+
81+
82+
def test_merge_trains_status_merge_request(
83+
project, resp_merge_trains_merge_request_get
84+
):
85+
# flow will be : project -> merge_trains : -> get merge_requests -> merge_request_iod
86+
merge_train_mr: ProjectMergeTrainMergeRequest = project.merge_trains.get(
87+
1, lazy=True
88+
).merge_requests.get(123)
89+
assert isinstance(merge_train_mr, ProjectMergeTrainMergeRequest)
90+
assert merge_train_mr.get_id() == 110

0 commit comments

Comments
 (0)