gitlab/api/projects/protected_branches/
unprotect.rs1use derive_builder::Builder;
8
9use crate::api::common::{self, NameOrId};
10use crate::api::endpoint_prelude::*;
11
12#[derive(Debug, Builder, Clone)]
14pub struct UnprotectBranch<'a> {
15 #[builder(setter(into))]
17 project: NameOrId<'a>,
18 #[builder(setter(into))]
20 name: Cow<'a, str>,
21}
22
23impl<'a> UnprotectBranch<'a> {
24 pub fn builder() -> UnprotectBranchBuilder<'a> {
26 UnprotectBranchBuilder::default()
27 }
28}
29
30impl Endpoint for UnprotectBranch<'_> {
31 fn method(&self) -> Method {
32 Method::DELETE
33 }
34
35 fn endpoint(&self) -> Cow<'static, str> {
36 format!(
37 "projects/{}/protected_branches/{}",
38 self.project,
39 common::path_escaped(&self.name),
40 )
41 .into()
42 }
43}
44
45#[cfg(test)]
46mod tests {
47 use http::Method;
48
49 use crate::api::projects::protected_branches::{UnprotectBranch, UnprotectBranchBuilderError};
50 use crate::api::{self, Query};
51 use crate::test::client::{ExpectedUrl, SingleTestClient};
52
53 #[test]
54 fn project_and_name_are_needed() {
55 let err = UnprotectBranch::builder().build().unwrap_err();
56 crate::test::assert_missing_field!(err, UnprotectBranchBuilderError, "project");
57 }
58
59 #[test]
60 fn project_is_required() {
61 let err = UnprotectBranch::builder()
62 .name("master")
63 .build()
64 .unwrap_err();
65 crate::test::assert_missing_field!(err, UnprotectBranchBuilderError, "project");
66 }
67
68 #[test]
69 fn name_is_required() {
70 let err = UnprotectBranch::builder().project(1).build().unwrap_err();
71 crate::test::assert_missing_field!(err, UnprotectBranchBuilderError, "name");
72 }
73
74 #[test]
75 fn project_and_name_are_sufficient() {
76 UnprotectBranch::builder()
77 .project(1)
78 .name("master")
79 .build()
80 .unwrap();
81 }
82
83 #[test]
84 fn endpoint() {
85 let endpoint = ExpectedUrl::builder()
86 .method(Method::DELETE)
87 .endpoint("projects/simple%2Fproject/protected_branches/branch%2Fname")
88 .build()
89 .unwrap();
90 let client = SingleTestClient::new_raw(endpoint, "");
91
92 let endpoint = UnprotectBranch::builder()
93 .project("simple/project")
94 .name("branch/name")
95 .build()
96 .unwrap();
97 api::ignore(endpoint).query(&client).unwrap();
98 }
99}