gitlab/api/events/
users.rs1use chrono::NaiveDate;
8use derive_builder::Builder;
9
10use crate::api::common::{NameOrId, SortOrder};
11use crate::api::endpoint_prelude::*;
12use crate::api::events::{EventAction, EventTarget};
13
14#[derive(Debug, Clone, Builder)]
16#[builder(setter(strip_option))]
17pub struct UserEvents<'a> {
18 #[builder(setter(into))]
20 user: NameOrId<'a>,
21
22 #[builder(default)]
24 action: Option<EventAction>,
25 #[builder(default)]
27 target_type: Option<EventTarget>,
28 #[builder(default)]
30 before: Option<NaiveDate>,
31 #[builder(default)]
33 after: Option<NaiveDate>,
34 #[builder(default)]
36 sort: Option<SortOrder>,
37}
38
39impl<'a> UserEvents<'a> {
40 pub fn builder() -> UserEventsBuilder<'a> {
42 UserEventsBuilder::default()
43 }
44}
45
46impl Endpoint for UserEvents<'_> {
47 fn method(&self) -> Method {
48 Method::GET
49 }
50
51 fn endpoint(&self) -> Cow<'static, str> {
52 format!("users/{}/events", self.user).into()
53 }
54
55 fn parameters(&self) -> QueryParams<'_> {
56 let mut params = QueryParams::default();
57
58 params
59 .push_opt("action", self.action)
60 .push_opt("target_type", self.target_type)
61 .push_opt("before", self.before)
62 .push_opt("after", self.after)
63 .push_opt("sort", self.sort);
64
65 params
66 }
67}
68
69impl Pageable for UserEvents<'_> {}
70
71#[cfg(test)]
72mod tests {
73 use chrono::NaiveDate;
74
75 use crate::api::common::SortOrder;
76 use crate::api::events::{EventAction, EventTarget, UserEvents, UserEventsBuilderError};
77 use crate::api::{self, Query};
78 use crate::test::client::{ExpectedUrl, SingleTestClient};
79
80 #[test]
81 fn user_is_needed() {
82 let err = UserEvents::builder().build().unwrap_err();
83 crate::test::assert_missing_field!(err, UserEventsBuilderError, "user");
84 }
85
86 #[test]
87 fn user_is_sufficient() {
88 UserEvents::builder().user(1).build().unwrap();
89 }
90
91 #[test]
92 fn endpoint() {
93 let endpoint = ExpectedUrl::builder()
94 .endpoint("users/1/events")
95 .build()
96 .unwrap();
97 let client = SingleTestClient::new_raw(endpoint, "");
98
99 let endpoint = UserEvents::builder().user(1).build().unwrap();
100 api::ignore(endpoint).query(&client).unwrap();
101 }
102
103 #[test]
104 fn endpoint_action() {
105 let endpoint = ExpectedUrl::builder()
106 .endpoint("users/user/events")
107 .add_query_params(&[("action", "reopened")])
108 .build()
109 .unwrap();
110 let client = SingleTestClient::new_raw(endpoint, "");
111
112 let endpoint = UserEvents::builder()
113 .user("user")
114 .action(EventAction::Reopened)
115 .build()
116 .unwrap();
117 api::ignore(endpoint).query(&client).unwrap();
118 }
119
120 #[test]
121 fn endpoint_target_type() {
122 let endpoint = ExpectedUrl::builder()
123 .endpoint("users/user/events")
124 .add_query_params(&[("target_type", "issue")])
125 .build()
126 .unwrap();
127 let client = SingleTestClient::new_raw(endpoint, "");
128
129 let endpoint = UserEvents::builder()
130 .user("user")
131 .target_type(EventTarget::Issue)
132 .build()
133 .unwrap();
134 api::ignore(endpoint).query(&client).unwrap();
135 }
136
137 #[test]
138 fn endpoint_before() {
139 let endpoint = ExpectedUrl::builder()
140 .endpoint("users/user/events")
141 .add_query_params(&[("before", "2025-01-01")])
142 .build()
143 .unwrap();
144 let client = SingleTestClient::new_raw(endpoint, "");
145
146 let endpoint = UserEvents::builder()
147 .user("user")
148 .before(NaiveDate::from_ymd_opt(2025, 1, 1).unwrap())
149 .build()
150 .unwrap();
151 api::ignore(endpoint).query(&client).unwrap();
152 }
153
154 #[test]
155 fn endpoint_after() {
156 let endpoint = ExpectedUrl::builder()
157 .endpoint("users/user/events")
158 .add_query_params(&[("after", "2025-01-01")])
159 .build()
160 .unwrap();
161 let client = SingleTestClient::new_raw(endpoint, "");
162
163 let endpoint = UserEvents::builder()
164 .user("user")
165 .after(NaiveDate::from_ymd_opt(2025, 1, 1).unwrap())
166 .build()
167 .unwrap();
168 api::ignore(endpoint).query(&client).unwrap();
169 }
170
171 #[test]
172 fn endpoint_sort() {
173 let endpoint = ExpectedUrl::builder()
174 .endpoint("users/user/events")
175 .add_query_params(&[("sort", "asc")])
176 .build()
177 .unwrap();
178 let client = SingleTestClient::new_raw(endpoint, "");
179
180 let endpoint = UserEvents::builder()
181 .user("user")
182 .sort(SortOrder::Ascending)
183 .build()
184 .unwrap();
185 api::ignore(endpoint).query(&client).unwrap();
186 }
187}