gitlab/api/projects/pipeline_schedules/variables/
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 variable from a pipeline schedule.
13#[derive(Debug, Builder, Clone)]
14pub struct DeletePipelineScheduleVariable<'a> {
15    /// The project to add the variable to.
16    #[builder(setter(into))]
17    project: NameOrId<'a>,
18    /// The pipeline schedule to add the variable to.
19    id: u64,
20    /// The key of the variable.
21    #[builder(setter(into))]
22    key: Cow<'a, str>,
23}
24
25impl<'a> DeletePipelineScheduleVariable<'a> {
26    /// Create a builder for the endpoint.
27    pub fn builder() -> DeletePipelineScheduleVariableBuilder<'a> {
28        DeletePipelineScheduleVariableBuilder::default()
29    }
30}
31
32impl Endpoint for DeletePipelineScheduleVariable<'_> {
33    fn method(&self) -> Method {
34        Method::DELETE
35    }
36
37    fn endpoint(&self) -> Cow<'static, str> {
38        format!(
39            "projects/{}/pipeline_schedules/{}/variables/{}",
40            self.project, self.id, self.key
41        )
42        .into()
43    }
44}
45
46#[cfg(test)]
47mod tests {
48    use http::Method;
49
50    use crate::api::projects::pipeline_schedules::variables::delete::{
51        DeletePipelineScheduleVariable, DeletePipelineScheduleVariableBuilderError,
52    };
53    use crate::api::{self, Query};
54    use crate::test::client::{ExpectedUrl, SingleTestClient};
55
56    #[test]
57    fn all_parameters_are_needed() {
58        let err = DeletePipelineScheduleVariable::builder()
59            .build()
60            .unwrap_err();
61        crate::test::assert_missing_field!(
62            err,
63            DeletePipelineScheduleVariableBuilderError,
64            "project"
65        );
66    }
67
68    #[test]
69    fn project_is_necessary() {
70        let err = DeletePipelineScheduleVariable::builder()
71            .id(10)
72            .key("testkey")
73            .build()
74            .unwrap_err();
75        crate::test::assert_missing_field!(
76            err,
77            DeletePipelineScheduleVariableBuilderError,
78            "project"
79        );
80    }
81
82    #[test]
83    fn id_is_necessary() {
84        let err = DeletePipelineScheduleVariable::builder()
85            .project(1)
86            .key("testkey")
87            .build()
88            .unwrap_err();
89        crate::test::assert_missing_field!(err, DeletePipelineScheduleVariableBuilderError, "id");
90    }
91
92    #[test]
93    fn key_is_necessary() {
94        let err = DeletePipelineScheduleVariable::builder()
95            .project(1)
96            .id(10)
97            .build()
98            .unwrap_err();
99        crate::test::assert_missing_field!(err, DeletePipelineScheduleVariableBuilderError, "key");
100    }
101
102    #[test]
103    fn sufficient_parameters() {
104        DeletePipelineScheduleVariable::builder()
105            .project(1)
106            .id(1)
107            .key("testkey")
108            .build()
109            .unwrap();
110    }
111
112    #[test]
113    fn endpoint() {
114        let endpoint = ExpectedUrl::builder()
115            .method(Method::DELETE)
116            .endpoint("projects/simple%2Fproject/pipeline_schedules/10/variables/testkey")
117            .build()
118            .unwrap();
119        let client = SingleTestClient::new_raw(endpoint, "");
120
121        let endpoint = DeletePipelineScheduleVariable::builder()
122            .project("simple/project")
123            .id(10)
124            .key("testkey")
125            .build()
126            .unwrap();
127        api::ignore(endpoint).query(&client).unwrap();
128    }
129}