gitlab/api/groups/members/
remove.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 RemoveGroupMember<'a> {
16 #[builder(setter(into))]
18 group: NameOrId<'a>,
19 user: u64,
21 #[builder(default)]
23 skip_subresources: Option<bool>,
24 #[builder(default)]
26 unassign_issuables: Option<bool>,
27}
28
29impl<'a> RemoveGroupMember<'a> {
30 pub fn builder() -> RemoveGroupMemberBuilder<'a> {
32 RemoveGroupMemberBuilder::default()
33 }
34}
35
36impl Endpoint for RemoveGroupMember<'_> {
37 fn method(&self) -> Method {
38 Method::DELETE
39 }
40
41 fn endpoint(&self) -> Cow<'static, str> {
42 format!("groups/{}/members/{}", self.group, self.user).into()
43 }
44
45 fn body(&self) -> Result<Option<(&'static str, Vec<u8>)>, BodyError> {
46 let mut params = FormParams::default();
47
48 params
49 .push_opt("skip_subresources", self.skip_subresources)
50 .push_opt("unassign_issuables", self.unassign_issuables);
51
52 params.into_body()
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use http::Method;
59
60 use crate::api::groups::members::{RemoveGroupMember, RemoveGroupMemberBuilderError};
61 use crate::api::{self, Query};
62 use crate::test::client::{ExpectedUrl, SingleTestClient};
63
64 #[test]
65 fn all_parameters_are_needed() {
66 let err = RemoveGroupMember::builder().build().unwrap_err();
67 crate::test::assert_missing_field!(err, RemoveGroupMemberBuilderError, "group");
68 }
69
70 #[test]
71 fn group_is_necessary() {
72 let err = RemoveGroupMember::builder().user(1).build().unwrap_err();
73 crate::test::assert_missing_field!(err, RemoveGroupMemberBuilderError, "group");
74 }
75
76 #[test]
77 fn user_is_necessary() {
78 let err = RemoveGroupMember::builder().group(1).build().unwrap_err();
79 crate::test::assert_missing_field!(err, RemoveGroupMemberBuilderError, "user");
80 }
81
82 #[test]
83 fn sufficient_parameters() {
84 RemoveGroupMember::builder()
85 .group("group")
86 .user(1)
87 .build()
88 .unwrap();
89 }
90
91 #[test]
92 fn endpoint() {
93 let endpoint = ExpectedUrl::builder()
94 .method(Method::DELETE)
95 .endpoint("groups/group%2Fsubgroup/members/1")
96 .content_type("application/x-www-form-urlencoded")
97 .build()
98 .unwrap();
99 let client = SingleTestClient::new_raw(endpoint, "");
100
101 let endpoint = RemoveGroupMember::builder()
102 .group("group/subgroup")
103 .user(1)
104 .build()
105 .unwrap();
106 api::ignore(endpoint).query(&client).unwrap();
107 }
108
109 #[test]
110 fn endpoint_skip_subresources() {
111 let endpoint = ExpectedUrl::builder()
112 .method(Method::DELETE)
113 .endpoint("groups/group%2Fsubgroup/members/1")
114 .content_type("application/x-www-form-urlencoded")
115 .body_str("skip_subresources=true")
116 .build()
117 .unwrap();
118 let client = SingleTestClient::new_raw(endpoint, "");
119
120 let endpoint = RemoveGroupMember::builder()
121 .group("group/subgroup")
122 .user(1)
123 .skip_subresources(true)
124 .build()
125 .unwrap();
126 api::ignore(endpoint).query(&client).unwrap();
127 }
128
129 #[test]
130 fn endpoint_unassign_issuables() {
131 let endpoint = ExpectedUrl::builder()
132 .method(Method::DELETE)
133 .endpoint("groups/group%2Fsubgroup/members/1")
134 .content_type("application/x-www-form-urlencoded")
135 .body_str("unassign_issuables=true")
136 .build()
137 .unwrap();
138 let client = SingleTestClient::new_raw(endpoint, "");
139
140 let endpoint = RemoveGroupMember::builder()
141 .group("group/subgroup")
142 .user(1)
143 .unassign_issuables(true)
144 .build()
145 .unwrap();
146 api::ignore(endpoint).query(&client).unwrap();
147 }
148}