Skip to main content

gitlab/api/projects/issues/notes/awards/
awards.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 awards on a note on an issue within a project.
13#[derive(Debug, Builder, Clone)]
14pub struct IssueNoteAwards<'a> {
15    /// The project to query for the issue.
16    #[builder(setter(into))]
17    project: NameOrId<'a>,
18    /// The ID of the issue.
19    issue: u64,
20    /// The ID of the note.
21    note: u64,
22}
23
24impl<'a> IssueNoteAwards<'a> {
25    /// Create a builder for the endpoint.
26    pub fn builder() -> IssueNoteAwardsBuilder<'a> {
27        IssueNoteAwardsBuilder::default()
28    }
29}
30
31impl Endpoint for IssueNoteAwards<'_> {
32    fn method(&self) -> Method {
33        Method::GET
34    }
35
36    fn endpoint(&self) -> Cow<'static, str> {
37        format!(
38            "projects/{}/issues/{}/notes/{}/award_emoji",
39            self.project, self.issue, self.note,
40        )
41        .into()
42    }
43}
44
45impl Pageable for IssueNoteAwards<'_> {}
46
47#[cfg(test)]
48mod tests {
49    use crate::api::projects::issues::notes::awards::{
50        IssueNoteAwards, IssueNoteAwardsBuilderError,
51    };
52    use crate::api::{self, Query};
53    use crate::test::client::{ExpectedUrl, SingleTestClient};
54
55    #[test]
56    fn project_issue_and_note_are_necessary() {
57        let err = IssueNoteAwards::builder().build().unwrap_err();
58        crate::test::assert_missing_field!(err, IssueNoteAwardsBuilderError, "project");
59    }
60
61    #[test]
62    fn project_is_necessary() {
63        let err = IssueNoteAwards::builder()
64            .issue(1)
65            .note(1)
66            .build()
67            .unwrap_err();
68        crate::test::assert_missing_field!(err, IssueNoteAwardsBuilderError, "project");
69    }
70
71    #[test]
72    fn issue_is_necessary() {
73        let err = IssueNoteAwards::builder()
74            .project(1)
75            .note(1)
76            .build()
77            .unwrap_err();
78        crate::test::assert_missing_field!(err, IssueNoteAwardsBuilderError, "issue");
79    }
80
81    #[test]
82    fn note_is_necessary() {
83        let err = IssueNoteAwards::builder()
84            .project(1)
85            .issue(1)
86            .build()
87            .unwrap_err();
88        crate::test::assert_missing_field!(err, IssueNoteAwardsBuilderError, "note");
89    }
90
91    #[test]
92    fn project_issue_and_note_are_sufficient() {
93        IssueNoteAwards::builder()
94            .project(1)
95            .issue(1)
96            .note(1)
97            .build()
98            .unwrap();
99    }
100
101    #[test]
102    fn endpoint() {
103        let endpoint = ExpectedUrl::builder()
104            .endpoint("projects/simple%2Fproject/issues/1/notes/1/award_emoji")
105            .build()
106            .unwrap();
107        let client = SingleTestClient::new_raw(endpoint, "");
108
109        let endpoint = IssueNoteAwards::builder()
110            .project("simple/project")
111            .issue(1)
112            .note(1)
113            .build()
114            .unwrap();
115        api::ignore(endpoint).query(&client).unwrap();
116    }
117}