gitlab/api/projects/issues/notes/awards/
delete.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/// Delete an existing award on a note within an issue within a project.
13#[derive(Debug, Builder, Clone)]
14pub struct DeleteIssueNoteAward<'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    /// The ID of the award.
23    award: u64,
24}
25
26impl<'a> DeleteIssueNoteAward<'a> {
27    /// Create a builder for the endpoint.
28    pub fn builder() -> DeleteIssueNoteAwardBuilder<'a> {
29        DeleteIssueNoteAwardBuilder::default()
30    }
31}
32
33impl Endpoint for DeleteIssueNoteAward<'_> {
34    fn method(&self) -> Method {
35        Method::DELETE
36    }
37
38    fn endpoint(&self) -> Cow<'static, str> {
39        format!(
40            "projects/{}/issues/{}/notes/{}/award_emoji/{}",
41            self.project, self.issue, self.note, self.award,
42        )
43        .into()
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use http::Method;
50
51    use crate::api::projects::issues::notes::awards::{
52        DeleteIssueNoteAward, DeleteIssueNoteAwardBuilderError,
53    };
54    use crate::api::{self, Query};
55    use crate::test::client::{ExpectedUrl, SingleTestClient};
56
57    #[test]
58    fn project_issue_note_and_award_are_necessary() {
59        let err = DeleteIssueNoteAward::builder().build().unwrap_err();
60        crate::test::assert_missing_field!(err, DeleteIssueNoteAwardBuilderError, "project");
61    }
62
63    #[test]
64    fn project_is_necessary() {
65        let err = DeleteIssueNoteAward::builder()
66            .issue(1)
67            .note(1)
68            .award(1)
69            .build()
70            .unwrap_err();
71        crate::test::assert_missing_field!(err, DeleteIssueNoteAwardBuilderError, "project");
72    }
73
74    #[test]
75    fn issue_is_necessary() {
76        let err = DeleteIssueNoteAward::builder()
77            .project(1)
78            .note(1)
79            .award(1)
80            .build()
81            .unwrap_err();
82        crate::test::assert_missing_field!(err, DeleteIssueNoteAwardBuilderError, "issue");
83    }
84
85    #[test]
86    fn note_is_necessary() {
87        let err = DeleteIssueNoteAward::builder()
88            .project(1)
89            .issue(1)
90            .award(1)
91            .build()
92            .unwrap_err();
93        crate::test::assert_missing_field!(err, DeleteIssueNoteAwardBuilderError, "note");
94    }
95
96    #[test]
97    fn award_is_necessary() {
98        let err = DeleteIssueNoteAward::builder()
99            .project(1)
100            .issue(1)
101            .note(1)
102            .build()
103            .unwrap_err();
104        crate::test::assert_missing_field!(err, DeleteIssueNoteAwardBuilderError, "award");
105    }
106
107    #[test]
108    fn project_issue_note_and_award_are_sufficient() {
109        DeleteIssueNoteAward::builder()
110            .project(1)
111            .issue(1)
112            .note(1)
113            .award(1)
114            .build()
115            .unwrap();
116    }
117
118    #[test]
119    fn endpoint() {
120        let endpoint = ExpectedUrl::builder()
121            .method(Method::DELETE)
122            .endpoint("projects/simple%2Fproject/issues/1/notes/2/award_emoji/3")
123            .build()
124            .unwrap();
125        let client = SingleTestClient::new_raw(endpoint, "");
126
127        let endpoint = DeleteIssueNoteAward::builder()
128            .project("simple/project")
129            .issue(1)
130            .note(2)
131            .award(3)
132            .build()
133            .unwrap();
134        api::ignore(endpoint).query(&client).unwrap();
135    }
136}