13
13
ProjectDeploymentMergeRequest ,
14
14
ProjectMergeRequest ,
15
15
ProjectMergeRequestReviewerDetail ,
16
+ ProjectIssue ,
16
17
)
17
18
18
19
mr_content = {
57
58
}
58
59
]
59
60
61
+ related_issues = [
62
+ {
63
+ "id" : 1 ,
64
+ "iid" : 1 ,
65
+ "project_id" : 1 ,
66
+ "title" : "Fake Title for Merge Requests via API" ,
67
+ "description" : "Something here" ,
68
+ "state" : "closed" ,
69
+ "created_at" : "2024-05-14T04:01:40.042Z" ,
70
+ "updated_at" : "2024-06-13T05:29:13.661Z" ,
71
+ "closed_at" : "2024-06-13T05:29:13.602Z" ,
72
+ "closed_by" : {
73
+ "id" : 2 ,
74
+ "name" : "Sam Bauch" ,
75
+ "username" : "kenyatta_oconnell" ,
76
+ "state" : "active" ,
77
+ "avatar_url" : "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon" ,
78
+ "web_url" : "http://gitlab.example.com//kenyatta_oconnell" ,
79
+ },
80
+ "labels" : [
81
+ "FakeCategory" ,
82
+ "fake:ml" ,
83
+ ],
84
+ "assignees" : [
85
+ {
86
+ "id" : 2 ,
87
+ "name" : "Sam Bauch" ,
88
+ "username" : "kenyatta_oconnell" ,
89
+ "state" : "active" ,
90
+ "avatar_url" : "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon" ,
91
+ "web_url" : "http://gitlab.example.com//kenyatta_oconnell" ,
92
+ }
93
+ ],
94
+ "author" : {
95
+ "id" : 2 ,
96
+ "name" : "Sam Bauch" ,
97
+ "username" : "kenyatta_oconnell" ,
98
+ "state" : "active" ,
99
+ "avatar_url" : "https://www.gravatar.com/avatar/956c92487c6f6f7616b536927e22c9a0?s=80&d=identicon" ,
100
+ "web_url" : "http://gitlab.example.com//kenyatta_oconnell" ,
101
+ },
102
+ "type" : "ISSUE" ,
103
+ "assignee" : {
104
+ "id" : 4459593 ,
105
+ "username" : "fakeuser" ,
106
+ "name" : "Fake User" ,
107
+ "state" : "active" ,
108
+ "locked" : False ,
109
+ "avatar_url" : "https://example.com/uploads/-/system/user/avatar/4459593/avatar.png" ,
110
+ "web_url" : "https://example.com/fakeuser" ,
111
+ },
112
+ "user_notes_count" : 9 ,
113
+ "merge_requests_count" : 0 ,
114
+ "upvotes" : 1 ,
115
+ "downvotes" : 0 ,
116
+ "due_date" : None ,
117
+ "confidential" : False ,
118
+ "discussion_locked" : None ,
119
+ "issue_type" : "issue" ,
120
+ "web_url" : "https://example.com/fakeorg/fakeproject/-/issues/461536" ,
121
+ "time_stats" : {
122
+ "time_estimate" : 0 ,
123
+ "total_time_spent" : 0 ,
124
+ "human_time_estimate" : None ,
125
+ "human_total_time_spent" : None ,
126
+ },
127
+ "task_completion_status" : {"count" : 0 , "completed_count" : 0 },
128
+ "weight" : None ,
129
+ "blocking_issues_count" : 0 ,
130
+ }
131
+ ]
132
+
60
133
61
134
@pytest .fixture
62
135
def resp_list_merge_requests ():
@@ -93,6 +166,28 @@ def resp_get_merge_request_reviewers():
93
166
yield rsps
94
167
95
168
169
+ @pytest .fixture
170
+ def resp_list_merge_requests_related_issues ():
171
+ with responses .RequestsMock () as rsps :
172
+ rsps .add (
173
+ method = responses .GET ,
174
+ url = re .compile (
175
+ r"http://localhost/api/v4/projects/1/(deployments/1/)?merge_requests"
176
+ ),
177
+ json = [mr_content ],
178
+ content_type = "application/json" ,
179
+ status = 200 ,
180
+ )
181
+ rsps .add (
182
+ method = responses .GET ,
183
+ url = "http://localhost/api/v4/projects/1/merge_requests/1/related_issues" ,
184
+ json = related_issues ,
185
+ content_type = "application/json" ,
186
+ status = 200 ,
187
+ )
188
+ yield rsps
189
+
190
+
96
191
def test_list_project_merge_requests (project , resp_list_merge_requests ):
97
192
mrs = project .mergerequests .list ()
98
193
assert isinstance (mrs [0 ], ProjectMergeRequest )
@@ -115,3 +210,12 @@ def test_get_merge_request_reviewers(project, resp_get_merge_request_reviewers):
115
210
assert mr .reviewers [0 ]["name" ] == reviewers_details [0 ].user ["name" ]
116
211
assert reviewers_details [0 ].state == "unreviewed"
117
212
assert reviewers_details [0 ].created_at == "2022-07-27T17:03:27.684Z"
213
+
214
+
215
+ def test_list_related_issues (project , resp_list_merge_requests_related_issues ):
216
+ mr = project .mergerequests .get (1 )
217
+ this_mr_related_issue = mr .related_issues .list ()
218
+ assert isinstance (mr , ProjectMergeRequest )
219
+ assert isinstance (this_mr_related_issue , list )
220
+ assert isinstance (this_mr_related_issue [0 ], ProjectIssue )
221
+ assert this_mr_related_issue [0 ]["title" ] == related_issues [0 ]["title" ]
0 commit comments