discogs_api/endpoints/
release_rating_by_user.rs

1use super::Endpoint;
2use crate::{data_types::Fallible, Error};
3use reqwest::Url;
4
5pub struct ReleaseRatingByUser;
6
7#[derive(Debug, Clone, Copy)]
8pub struct Params<'a> {
9    pub release_id: isize,
10    pub username: &'a str,
11}
12
13impl<'de> Endpoint<'de> for ReleaseRatingByUser {
14    type Parameters = Params<'de>;
15    type ReturnType = Fallible<crate::data_types::ReleaseRatingByUser>;
16
17    fn build_url(base: &Url, params: Self::Parameters) -> Result<Url, Error> {
18        base.join(&format!(
19            "/releases/{}/rating/{}",
20            params.release_id, params.username
21        ))
22        .map_err(|_| Error::UrlError)
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29    use crate::Client;
30
31    #[test]
32    fn empty_username() {
33        let params = Params {
34            release_id: 27651927,
35            username: "",
36        };
37
38        let resp = Client::builder()
39            .build()
40            .unwrap()
41            .get::<ReleaseRatingByUser>(params)
42            .unwrap();
43        let resp = resp.to_result().expect_err("expected failure");
44
45        assert_eq!(resp.as_str(), "The requested resource was not found.");
46    }
47
48    #[test]
49    fn with_username() {
50        let params = Params {
51            release_id: 27651927,
52            username: "br3adina7or",
53        };
54
55        let resp = Client::builder()
56            .build()
57            .unwrap()
58            .get::<ReleaseRatingByUser>(params)
59            .unwrap();
60        let resp = resp.to_result().expect("expected ok");
61        assert_eq!(resp.release_id, params.release_id);
62        assert_eq!(&resp.username, params.username);
63    }
64}