Skip to main content

gitlab/api/users/
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::endpoint_prelude::*;
10
11/// Delete a user from an instance.
12#[derive(Debug, Builder, Clone)]
13#[builder(setter(strip_option))]
14pub struct DeleteUser {
15    /// The user to delete.
16    id: u64,
17    /// Whether to delete resources owned solely by this user instead of moving them to a ghost user.
18    #[builder(default)]
19    hard_delete: Option<bool>,
20}
21
22impl DeleteUser {
23    /// Create a builder for the endpoint.
24    pub fn builder() -> DeleteUserBuilder {
25        DeleteUserBuilder::default()
26    }
27}
28
29impl Endpoint for DeleteUser {
30    fn method(&self) -> Method {
31        Method::DELETE
32    }
33
34    fn endpoint(&self) -> Cow<'static, str> {
35        format!("users/{}", self.id).into()
36    }
37
38    fn body(&self) -> Result<Option<(&'static str, Vec<u8>)>, BodyError> {
39        let mut params = FormParams::default();
40
41        params.push_opt("hard_delete", self.hard_delete);
42
43        params.into_body()
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use http::Method;
50
51    use crate::api::users::delete::{DeleteUser, DeleteUserBuilderError};
52    use crate::api::{self, Query};
53    use crate::test::client::{ExpectedUrl, SingleTestClient};
54
55    #[test]
56    fn id_is_necessary() {
57        let err = DeleteUser::builder().build().unwrap_err();
58        crate::test::assert_missing_field!(err, DeleteUserBuilderError, "id");
59    }
60
61    #[test]
62    fn sufficient_parameters() {
63        DeleteUser::builder().id(1).build().unwrap();
64    }
65
66    #[test]
67    fn endpoint() {
68        let endpoint = ExpectedUrl::builder()
69            .method(Method::DELETE)
70            .endpoint("users/1")
71            .content_type("application/x-www-form-urlencoded")
72            .build()
73            .unwrap();
74        let client = SingleTestClient::new_raw(endpoint, "");
75
76        let endpoint = DeleteUser::builder().id(1).build().unwrap();
77        api::ignore(endpoint).query(&client).unwrap();
78    }
79
80    #[test]
81    fn endpoint_hard_delete() {
82        let endpoint = ExpectedUrl::builder()
83            .method(Method::DELETE)
84            .endpoint("users/1")
85            .content_type("application/x-www-form-urlencoded")
86            .body_str("hard_delete=true")
87            .build()
88            .unwrap();
89        let client = SingleTestClient::new_raw(endpoint, "");
90
91        let endpoint = DeleteUser::builder()
92            .id(1)
93            .hard_delete(true)
94            .build()
95            .unwrap();
96        api::ignore(endpoint).query(&client).unwrap();
97    }
98}