discogs_api/endpoints/
artist.rs

1use crate::Error;
2
3use super::Endpoint;
4
5pub struct Artist;
6
7impl Endpoint<'_> for Artist {
8    type Parameters = isize;
9    type ReturnType = crate::data_types::Artist;
10
11    fn build_url(base: &reqwest::Url, params: Self::Parameters) -> Result<reqwest::Url, Error> {
12        base.join(&format!("/artists/{params}"))
13            .map_err(|_| Error::UrlError)
14    }
15}
16
17#[cfg(test)]
18mod tests {
19    use super::Artist;
20    use crate::{Auth, Client};
21
22    #[test]
23    fn basic() {
24        let id = 8298093;
25        let data = Client::builder()
26            .build()
27            .unwrap()
28            .get::<Artist>(id)
29            .unwrap();
30        assert_eq!(data.id, id);
31        assert_eq!(data.name.as_str(), "Meenoi");
32    }
33
34    #[test]
35    fn with_auth() {
36        let id = 5210284;
37        let pat = std::env::var("discogs-pat")
38            .expect("expected personal access token in env var `discogs-pat`");
39
40        let data = Client::builder()
41            .auth(Auth::Token(pat))
42            .build()
43            .unwrap()
44            .get::<Artist>(id)
45            .unwrap();
46
47        assert_eq!(data.name.as_str(), "BLACKPINK");
48        assert_eq!(data.id, id);
49        assert_eq!(data.realname.as_ref().unwrap().as_str(), "λΈ”λž™ν•‘ν¬");
50        assert!(!data.urls.is_empty());
51
52        let member_ids = [6771863, 6771866, 6771868, 6771905];
53        for member in data.members.as_ref().unwrap() {
54            assert!(
55                member_ids.contains(&member.id),
56                "found unexpected member id, `{}`",
57                member.id
58            );
59        }
60
61        assert!(!data.images[0].resource_url.is_empty());
62    }
63}