gitlab/api/projects/merge_requests/
issues_closed_by.rs1use derive_builder::Builder;
8
9use crate::api::common::NameOrId;
10use crate::api::endpoint_prelude::*;
11
12#[derive(Debug, Builder, Clone)]
14#[builder(setter(strip_option))]
15pub struct IssuesClosedBy<'a> {
16 #[builder(setter(into))]
18 project: NameOrId<'a>,
19 merge_request: u64,
21}
22
23impl<'a> IssuesClosedBy<'a> {
24 pub fn builder() -> IssuesClosedByBuilder<'a> {
26 IssuesClosedByBuilder::default()
27 }
28}
29
30impl Endpoint for IssuesClosedBy<'_> {
31 fn method(&self) -> Method {
32 Method::GET
33 }
34
35 fn endpoint(&self) -> Cow<'static, str> {
36 format!(
37 "projects/{}/merge_requests/{}/closes_issues",
38 self.project, self.merge_request,
39 )
40 .into()
41 }
42}
43
44impl Pageable for IssuesClosedBy<'_> {}
45
46#[cfg(test)]
47mod tests {
48 use crate::api::projects::merge_requests::{IssuesClosedBy, IssuesClosedByBuilderError};
49 use crate::api::{self, Query};
50 use crate::test::client::{ExpectedUrl, SingleTestClient};
51
52 #[test]
53 fn project_and_merge_request_are_needed() {
54 let err = IssuesClosedBy::builder().build().unwrap_err();
55 crate::test::assert_missing_field!(err, IssuesClosedByBuilderError, "project");
56 }
57
58 #[test]
59 fn project_is_needed() {
60 let err = IssuesClosedBy::builder()
61 .merge_request(1)
62 .build()
63 .unwrap_err();
64 crate::test::assert_missing_field!(err, IssuesClosedByBuilderError, "project");
65 }
66
67 #[test]
68 fn merge_request_is_needed() {
69 let err = IssuesClosedBy::builder().project(1).build().unwrap_err();
70 crate::test::assert_missing_field!(err, IssuesClosedByBuilderError, "merge_request");
71 }
72
73 #[test]
74 fn project_and_merge_request_are_sufficient() {
75 IssuesClosedBy::builder()
76 .project(1)
77 .merge_request(1)
78 .build()
79 .unwrap();
80 }
81
82 #[test]
83 fn endpoint() {
84 let endpoint = ExpectedUrl::builder()
85 .endpoint("projects/simple%2Fproject/merge_requests/1/closes_issues")
86 .build()
87 .unwrap();
88 let client = SingleTestClient::new_raw(endpoint, "");
89
90 let endpoint = IssuesClosedBy::builder()
91 .project("simple/project")
92 .merge_request(1)
93 .build()
94 .unwrap();
95 api::ignore(endpoint).query(&client).unwrap();
96 }
97}