gitlab/api/projects/merge_requests/notes/awards/
create.rs1use derive_builder::Builder;
8
9use crate::api::common::NameOrId;
10use crate::api::endpoint_prelude::*;
11
12#[derive(Debug, Builder, Clone)]
14pub struct CreateMergeRequestNoteAward<'a> {
15 #[builder(setter(into))]
17 project: NameOrId<'a>,
18 merge_request: u64,
20 note: u64,
22 #[builder(setter(into))]
24 name: Cow<'a, str>,
25}
26
27impl<'a> CreateMergeRequestNoteAward<'a> {
28 pub fn builder() -> CreateMergeRequestNoteAwardBuilder<'a> {
30 CreateMergeRequestNoteAwardBuilder::default()
31 }
32}
33
34impl Endpoint for CreateMergeRequestNoteAward<'_> {
35 fn method(&self) -> Method {
36 Method::POST
37 }
38
39 fn endpoint(&self) -> Cow<'static, str> {
40 format!(
41 "projects/{}/merge_requests/{}/notes/{}/award_emoji",
42 self.project, self.merge_request, self.note,
43 )
44 .into()
45 }
46
47 fn body(&self) -> Result<Option<(&'static str, Vec<u8>)>, BodyError> {
48 let mut params = FormParams::default();
49
50 params.push("name", self.name.as_ref());
51
52 params.into_body()
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use http::Method;
59
60 use crate::api::projects::merge_requests::notes::awards::{
61 CreateMergeRequestNoteAward, CreateMergeRequestNoteAwardBuilderError,
62 };
63 use crate::api::{self, Query};
64 use crate::test::client::{ExpectedUrl, SingleTestClient};
65
66 #[test]
67 fn project_merge_request_note_and_name_are_necessary() {
68 let err = CreateMergeRequestNoteAward::builder().build().unwrap_err();
69 crate::test::assert_missing_field!(err, CreateMergeRequestNoteAwardBuilderError, "project");
70 }
71
72 #[test]
73 fn project_is_necessary() {
74 let err = CreateMergeRequestNoteAward::builder()
75 .merge_request(1)
76 .note(1)
77 .name("award")
78 .build()
79 .unwrap_err();
80 crate::test::assert_missing_field!(err, CreateMergeRequestNoteAwardBuilderError, "project");
81 }
82
83 #[test]
84 fn merge_request_is_necessary() {
85 let err = CreateMergeRequestNoteAward::builder()
86 .project(1)
87 .note(1)
88 .name("award")
89 .build()
90 .unwrap_err();
91 crate::test::assert_missing_field!(
92 err,
93 CreateMergeRequestNoteAwardBuilderError,
94 "merge_request",
95 );
96 }
97
98 #[test]
99 fn note_is_necessary() {
100 let err = CreateMergeRequestNoteAward::builder()
101 .project(1)
102 .merge_request(1)
103 .name("award")
104 .build()
105 .unwrap_err();
106 crate::test::assert_missing_field!(err, CreateMergeRequestNoteAwardBuilderError, "note");
107 }
108
109 #[test]
110 fn name_is_necessary() {
111 let err = CreateMergeRequestNoteAward::builder()
112 .project(1)
113 .merge_request(1)
114 .note(1)
115 .build()
116 .unwrap_err();
117 crate::test::assert_missing_field!(err, CreateMergeRequestNoteAwardBuilderError, "name");
118 }
119
120 #[test]
121 fn project_merge_request_note_and_name_are_sufficient() {
122 CreateMergeRequestNoteAward::builder()
123 .project(1)
124 .merge_request(1)
125 .note(1)
126 .name("award")
127 .build()
128 .unwrap();
129 }
130
131 #[test]
132 fn endpoint() {
133 let endpoint = ExpectedUrl::builder()
134 .method(Method::POST)
135 .endpoint("projects/simple%2Fproject/merge_requests/1/notes/1/award_emoji")
136 .content_type("application/x-www-form-urlencoded")
137 .body_str("name=emoji")
138 .build()
139 .unwrap();
140 let client = SingleTestClient::new_raw(endpoint, "");
141
142 let endpoint = CreateMergeRequestNoteAward::builder()
143 .project("simple/project")
144 .merge_request(1)
145 .note(1)
146 .name("emoji")
147 .build()
148 .unwrap();
149 api::ignore(endpoint).query(&client).unwrap();
150 }
151}