gitlab/api/projects/labels/
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 a label within a project.
13#[derive(Debug, Clone, Builder)]
14pub struct DeleteLabel<'a> {
15    /// The project to delete a label within.
16    #[builder(setter(into))]
17    project: NameOrId<'a>,
18    /// The ID or title of the label.
19    #[builder(setter(into))]
20    label: NameOrId<'a>,
21}
22
23impl<'a> DeleteLabel<'a> {
24    /// Create a builder for the endpoint.
25    pub fn builder() -> DeleteLabelBuilder<'a> {
26        DeleteLabelBuilder::default()
27    }
28}
29
30impl Endpoint for DeleteLabel<'_> {
31    fn method(&self) -> Method {
32        Method::DELETE
33    }
34
35    fn endpoint(&self) -> Cow<'static, str> {
36        format!("projects/{}/labels/{}", self.project, self.label).into()
37    }
38}
39
40#[cfg(test)]
41mod tests {
42    use http::Method;
43
44    use crate::api::projects::labels::{DeleteLabel, DeleteLabelBuilderError};
45    use crate::api::{self, Query};
46    use crate::test::client::{ExpectedUrl, SingleTestClient};
47
48    #[test]
49    fn project_and_label_are_necessary() {
50        let err = DeleteLabel::builder().build().unwrap_err();
51        crate::test::assert_missing_field!(err, DeleteLabelBuilderError, "project");
52    }
53
54    #[test]
55    fn project_is_necessary() {
56        let err = DeleteLabel::builder().label("label").build().unwrap_err();
57        crate::test::assert_missing_field!(err, DeleteLabelBuilderError, "project");
58    }
59
60    #[test]
61    fn label_is_necessary() {
62        let err = DeleteLabel::builder().project(1).build().unwrap_err();
63        crate::test::assert_missing_field!(err, DeleteLabelBuilderError, "label");
64    }
65
66    #[test]
67    fn project_and_label_are_sufficient() {
68        DeleteLabel::builder()
69            .project(1)
70            .label("label")
71            .build()
72            .unwrap();
73    }
74
75    #[test]
76    fn endpoint() {
77        let endpoint = ExpectedUrl::builder()
78            .method(Method::DELETE)
79            .endpoint("projects/simple%2Fproject/labels/simple%2Flabel")
80            .build()
81            .unwrap();
82        let client = SingleTestClient::new_raw(endpoint, "");
83
84        let endpoint = DeleteLabel::builder()
85            .project("simple/project")
86            .label("simple/label")
87            .build()
88            .unwrap();
89        api::ignore(endpoint).query(&client).unwrap();
90    }
91}