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