gitlab/api/projects/issues/
merge_requests_closing.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 merge requests closing an issue
13#[derive(Debug, Builder, Clone)]
14pub struct MergeRequestsClosing<'a> {
15    /// The project to of the merge request.
16    #[builder(setter(into))]
17    project: NameOrId<'a>,
18    /// The ID of the issue
19    issue: u64,
20}
21
22impl<'a> MergeRequestsClosing<'a> {
23    /// Create a builder for the endpoint.
24    pub fn builder() -> MergeRequestsClosingBuilder<'a> {
25        MergeRequestsClosingBuilder::default()
26    }
27}
28
29impl Endpoint for MergeRequestsClosing<'_> {
30    fn method(&self) -> Method {
31        Method::GET
32    }
33
34    fn endpoint(&self) -> Cow<'static, str> {
35        format!("projects/{}/issues/{}/closed_by", self.project, self.issue).into()
36    }
37}
38
39impl Pageable for MergeRequestsClosing<'_> {}
40
41#[cfg(test)]
42mod tests {
43    use crate::api::projects::issues::{MergeRequestsClosing, MergeRequestsClosingBuilderError};
44    use crate::api::{self, Query};
45    use crate::test::client::{ExpectedUrl, SingleTestClient};
46
47    #[test]
48    fn project_and_issue_are_needed() {
49        let err = MergeRequestsClosing::builder().build().unwrap_err();
50        crate::test::assert_missing_field!(err, MergeRequestsClosingBuilderError, "project");
51    }
52
53    #[test]
54    fn project_is_needed() {
55        let err = MergeRequestsClosing::builder()
56            .issue(1)
57            .build()
58            .unwrap_err();
59        crate::test::assert_missing_field!(err, MergeRequestsClosingBuilderError, "project");
60    }
61
62    #[test]
63    fn issue_is_needed() {
64        let err = MergeRequestsClosing::builder()
65            .project(1)
66            .build()
67            .unwrap_err();
68        crate::test::assert_missing_field!(err, MergeRequestsClosingBuilderError, "issue");
69    }
70
71    #[test]
72    fn project_and_issue_are_sufficient() {
73        MergeRequestsClosing::builder()
74            .project(1)
75            .issue(1)
76            .build()
77            .unwrap();
78    }
79
80    #[test]
81    fn endpoint() {
82        let endpoint = ExpectedUrl::builder()
83            .endpoint("projects/simple%2Fproject/issues/1/closed_by")
84            .build()
85            .unwrap();
86        let client = SingleTestClient::new_raw(endpoint, "");
87
88        let endpoint = MergeRequestsClosing::builder()
89            .project("simple/project")
90            .issue(1)
91            .build()
92            .unwrap();
93        api::ignore(endpoint).query(&client).unwrap();
94    }
95}