spotify_cli/io/formatters/
user.rs1use serde_json::Value;
4
5use crate::io::common::format_number;
6
7pub fn format_user_profile(payload: &Value) {
8 let display_name = payload
9 .get("display_name")
10 .and_then(|v| v.as_str())
11 .unwrap_or("Unknown");
12 let email = payload.get("email").and_then(|v| v.as_str());
13 let country = payload.get("country").and_then(|v| v.as_str());
14 let product = payload
15 .get("product")
16 .and_then(|v| v.as_str())
17 .unwrap_or("free");
18 let followers = payload
19 .get("followers")
20 .and_then(|f| f.get("total"))
21 .and_then(|v| v.as_u64())
22 .unwrap_or(0);
23 let uri = payload.get("uri").and_then(|v| v.as_str()).unwrap_or("");
24
25 println!("{}", display_name);
26 if let Some(email) = email {
27 println!(" Email: {}", email);
28 }
29 if let Some(country) = country {
30 println!(" Country: {}", country);
31 }
32 println!(" Plan: {}", product);
33 println!(" Followers: {}", format_number(followers));
34 if !uri.is_empty() {
35 println!(" URI: {}", uri);
36 }
37}
38
39#[cfg(test)]
40mod tests {
41 use super::*;
42 use serde_json::json;
43
44 #[test]
45 fn format_user_profile_full() {
46 let payload = json!({
47 "display_name": "Test User",
48 "email": "test@example.com",
49 "country": "US",
50 "product": "premium",
51 "followers": { "total": 1500 },
52 "uri": "spotify:user:testuser"
53 });
54 format_user_profile(&payload);
55 }
56
57 #[test]
58 fn format_user_profile_minimal() {
59 let payload = json!({});
60 format_user_profile(&payload);
61 }
62
63 #[test]
64 fn format_user_profile_without_email() {
65 let payload = json!({
66 "display_name": "Test User",
67 "country": "GB",
68 "product": "free",
69 "followers": { "total": 0 }
70 });
71 format_user_profile(&payload);
72 }
73
74 #[test]
75 fn format_user_profile_without_country() {
76 let payload = json!({
77 "display_name": "Test User",
78 "email": "test@example.com",
79 "product": "premium"
80 });
81 format_user_profile(&payload);
82 }
83
84 #[test]
85 fn format_user_profile_large_followers() {
86 let payload = json!({
87 "display_name": "Popular Artist",
88 "followers": { "total": 5000000 }
89 });
90 format_user_profile(&payload);
91 }
92}