gitlab/api/projects/merge_requests/
issues_closed_by.rs

1// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
2// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
4// option. This file may not be copied, modified, or distributed
5// except according to those terms.
6
7use derive_builder::Builder;
8
9use crate::api::common::NameOrId;
10use crate::api::endpoint_prelude::*;
11
12/// Query for issues closed by a merge request.
13#[derive(Debug, Builder, Clone)]
14#[builder(setter(strip_option))]
15pub struct IssuesClosedBy<'a> {
16    /// The project to of the merge request.
17    #[builder(setter(into))]
18    project: NameOrId<'a>,
19    /// The ID of the merge request.
20    merge_request: u64,
21}
22
23impl<'a> IssuesClosedBy<'a> {
24    /// Create a builder for the endpoint.
25    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}