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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy