gitlab/api/projects/packages/generic/
get.rs1use crate::api::common::{self, NameOrId};
8use crate::api::endpoint_prelude::*;
9use derive_builder::Builder;
10
11#[derive(Debug, Builder, Clone)]
13pub struct GetPackageFile<'a> {
14 #[builder(setter(into))]
16 project: NameOrId<'a>,
17
18 #[builder(setter(into))]
24 package_name: Cow<'a, str>,
25
26 #[builder(setter(into))]
30 package_version: Cow<'a, str>,
31
32 #[builder(setter(into))]
38 file_name: Cow<'a, str>,
39}
40
41impl<'a> GetPackageFile<'a> {
42 pub fn builder() -> GetPackageFileBuilder<'a> {
44 GetPackageFileBuilder::default()
45 }
46}
47
48impl Endpoint for GetPackageFile<'_> {
49 fn method(&self) -> Method {
50 Method::GET
51 }
52
53 fn endpoint(&self) -> Cow<'static, str> {
54 format!(
55 "projects/{}/packages/generic/{}/{}/{}",
56 self.project,
57 common::path_escaped(self.package_name.as_ref()),
58 common::path_escaped(self.package_version.as_ref()),
59 common::directory_path_escaped(self.file_name.as_ref()),
60 )
61 .into()
62 }
63}
64
65#[cfg(test)]
66mod tests {
67 use http::Method;
68
69 use crate::{
70 api::{
71 self,
72 projects::packages::generic::get::{GetPackageFile, GetPackageFileBuilderError},
73 Query,
74 },
75 test::client::{ExpectedUrl, SingleTestClient},
76 };
77
78 #[test]
79 fn project_is_needed() {
80 let err = GetPackageFile::builder()
81 .package_name("test_package")
82 .package_version("1.2.3")
83 .file_name("test_file.zip")
84 .build()
85 .unwrap_err();
86 crate::test::assert_missing_field!(err, GetPackageFileBuilderError, "project");
87 }
88
89 #[test]
90 fn package_name_is_needed() {
91 let err = GetPackageFile::builder()
92 .project(1337)
93 .package_version("1.2.3")
94 .file_name("test_file.zip")
95 .build()
96 .unwrap_err();
97 crate::test::assert_missing_field!(err, GetPackageFileBuilderError, "package_name");
98 }
99
100 #[test]
101 fn package_version_is_needed() {
102 let err = GetPackageFile::builder()
103 .project(1337)
104 .package_name("test_package")
105 .file_name("test_file.zip")
106 .build()
107 .unwrap_err();
108 crate::test::assert_missing_field!(err, GetPackageFileBuilderError, "package_version");
109 }
110
111 #[test]
112 fn file_name_is_needed() {
113 let err = GetPackageFile::builder()
114 .project(1337)
115 .package_name("test_package")
116 .package_version("1.2.3")
117 .build()
118 .unwrap_err();
119 crate::test::assert_missing_field!(err, GetPackageFileBuilderError, "file_name");
120 }
121
122 #[test]
123 fn required_parameter_are_sufficient() {
124 GetPackageFile::builder()
125 .project(1)
126 .package_name("test_package")
127 .package_version("1.2.3")
128 .file_name("test_file.zip")
129 .build()
130 .unwrap();
131 }
132
133 #[test]
134 fn endpoint() {
135 let endpoint = ExpectedUrl::builder()
136 .method(Method::GET)
137 .endpoint("projects/1337/packages/generic/test_package/1.2.3/test_file.zip")
138 .build()
139 .unwrap();
140 let client = SingleTestClient::new_raw(endpoint, "");
141
142 let endpoint = GetPackageFile::builder()
143 .project(1337)
144 .package_name("test_package")
145 .package_version("1.2.3")
146 .file_name("test_file.zip")
147 .build()
148 .unwrap();
149 api::ignore(endpoint).query(&client).unwrap();
150 }
151
152 #[test]
153 fn endpoint_pathed() {
154 let endpoint = ExpectedUrl::builder()
155 .method(Method::GET)
156 .endpoint("projects/1337/packages/generic/test_package%2Fwith_dir/subpkg%2F1.2.3/test_dir/file.zip")
157 .build()
158 .unwrap();
159 let client = SingleTestClient::new_raw(endpoint, "");
160
161 let endpoint = GetPackageFile::builder()
162 .project(1337)
163 .package_name("test_package/with_dir")
164 .package_version("subpkg/1.2.3")
165 .file_name("test_dir/file.zip")
166 .build()
167 .unwrap();
168 api::ignore(endpoint).query(&client).unwrap();
169 }
170}