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