aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/config.rs133
-rw-r--r--tests/database.rs85
-rw-r--r--tests/playback.rs175
-rw-r--r--tests/scrobbler.rs77
4 files changed, 470 insertions, 0 deletions
diff --git a/tests/config.rs b/tests/config.rs
new file mode 100644
index 0000000..70c5034
--- /dev/null
+++ b/tests/config.rs
@@ -0,0 +1,133 @@
1use rsp::config::Config;
2use std::path::PathBuf;
3
4#[test]
5fn test_config_get_scan_interval() {
6 let config = Config {
7 config_path: PathBuf::from("/test/config.toml"),
8 music_paths: vec![],
9 scan_interval: Some(3600),
10 socket_path: None,
11 lastfm_api_key: None,
12 lastfm_api_secret: None,
13 lastfm_session_key: None,
14 listenbrainz_token: None,
15 volume: None,
16 shuffle: None,
17 };
18 assert_eq!(config.get("scan_interval").unwrap(), "3600");
19}
20
21#[test]
22fn test_config_get_not_set() {
23 let config = Config {
24 config_path: PathBuf::from("/test/config.toml"),
25 ..Default::default()
26 };
27 assert_eq!(config.get("scan_interval").unwrap(), "not set");
28}
29
30#[test]
31fn test_config_get_volume() {
32 let config = Config {
33 config_path: PathBuf::from("/test/config.toml"),
34 music_paths: vec![],
35 scan_interval: None,
36 socket_path: None,
37 lastfm_api_key: None,
38 lastfm_api_secret: None,
39 lastfm_session_key: None,
40 listenbrainz_token: None,
41 volume: Some(75),
42 shuffle: None,
43 };
44 assert_eq!(config.get("volume").unwrap(), "75");
45}
46
47#[test]
48fn test_config_get_unknown_key() {
49 let config = Config::default();
50 let result = config.get("unknown_key");
51 assert!(result.is_err());
52}
53
54#[test]
55fn test_config_set_scan_interval() {
56 let mut config = Config::default();
57 config.set("scan_interval", "7200").unwrap();
58 assert_eq!(config.scan_interval, Some(7200));
59}
60
61#[test]
62fn test_config_set_invalid_scan_interval() {
63 let mut config = Config::default();
64 let result = config.set("scan_interval", "invalid");
65 assert!(result.is_err());
66}
67
68#[test]
69fn test_config_set_volume() {
70 let mut config = Config::default();
71 config.set("volume", "50").unwrap();
72 assert_eq!(config.volume, Some(50));
73}
74
75#[test]
76fn test_config_set_invalid_volume() {
77 let mut config = Config::default();
78 let result = config.set("volume", "256");
79 assert!(result.is_err());
80}
81
82#[test]
83fn test_config_set_shuffle_valid() {
84 let mut config = Config::default();
85 config.set("shuffle", "all").unwrap();
86 assert_eq!(config.shuffle, Some("all".to_string()));
87}
88
89#[test]
90fn test_config_set_shuffle_off() {
91 let mut config = Config::default();
92 config.set("shuffle", "off").unwrap();
93 assert_eq!(config.shuffle, None);
94}
95
96#[test]
97fn test_config_set_shuffle_invalid() {
98 let mut config = Config::default();
99 let result = config.set("shuffle", "invalid");
100 assert!(result.is_err());
101}
102
103#[test]
104fn test_config_set_unknown_key() {
105 let mut config = Config::default();
106 let result = config.set("unknown_key", "value");
107 assert!(result.is_err());
108}
109
110#[test]
111fn test_config_unset_volume() {
112 let mut config = Config {
113 config_path: PathBuf::from("/test/config.toml"),
114 music_paths: vec![],
115 scan_interval: None,
116 socket_path: None,
117 lastfm_api_key: None,
118 lastfm_api_secret: None,
119 lastfm_session_key: None,
120 listenbrainz_token: None,
121 volume: Some(50),
122 shuffle: None,
123 };
124 config.unset("volume").unwrap();
125 assert_eq!(config.volume, None);
126}
127
128#[test]
129fn test_config_unset_unknown_key() {
130 let mut config = Config::default();
131 let result = config.unset("unknown_key");
132 assert!(result.is_err());
133}
diff --git a/tests/database.rs b/tests/database.rs
new file mode 100644
index 0000000..67fe0ed
--- /dev/null
+++ b/tests/database.rs
@@ -0,0 +1,85 @@
1use rsp::database::{extract_metadata, is_audio_file};
2use std::path::PathBuf;
3
4#[test]
5fn test_is_audio_file_mp3() {
6 let path = PathBuf::from("/music/song.mp3");
7 assert!(is_audio_file(&path));
8}
9
10#[test]
11fn test_is_audio_file_flac() {
12 let path = PathBuf::from("/music/song.flac");
13 assert!(is_audio_file(&path));
14}
15
16#[test]
17fn test_is_audio_file_ogg() {
18 let path = PathBuf::from("/music/song.ogg");
19 assert!(is_audio_file(&path));
20}
21
22#[test]
23fn test_is_audio_file_m4a() {
24 let path = PathBuf::from("/music/song.m4a");
25 assert!(is_audio_file(&path));
26}
27
28#[test]
29fn test_is_audio_file_wav() {
30 let path = PathBuf::from("/music/song.wav");
31 assert!(is_audio_file(&path));
32}
33
34#[test]
35fn test_is_audio_file_opus() {
36 let path = PathBuf::from("/music/song.opus");
37 assert!(is_audio_file(&path));
38}
39
40#[test]
41fn test_is_audio_file_uppercase() {
42 let path = PathBuf::from("/music/song.MP3");
43 assert!(is_audio_file(&path));
44}
45
46#[test]
47fn test_is_audio_file_non_audio() {
48 let path = PathBuf::from("/music/song.txt");
49 assert!(!is_audio_file(&path));
50}
51
52#[test]
53fn test_is_audio_file_no_extension() {
54 let path = PathBuf::from("/music/songfile");
55 assert!(!is_audio_file(&path));
56}
57
58#[test]
59fn test_extract_metadata_standard_path() {
60 let path = PathBuf::from("/music/Artist/Album/Track.mp3");
61 let (artist, album, title, track_num, duration) = extract_metadata(&path);
62 assert_eq!(artist, "Artist");
63 assert_eq!(album, "Album");
64 assert_eq!(title, "Track");
65 assert_eq!(track_num, None);
66 assert_eq!(duration, None);
67}
68
69#[test]
70fn test_extract_metadata_deep_path() {
71 let path = PathBuf::from("/music/Artist/Album/Disc1/Track.mp3");
72 let (artist, album, title, _, _) = extract_metadata(&path);
73 assert_eq!(artist, "Album");
74 assert_eq!(album, "Disc1");
75 assert_eq!(title, "Track");
76}
77
78#[test]
79fn test_extract_metadata_no_parent() {
80 let path = PathBuf::from("/song.mp3");
81 let (artist, album, title, _, _) = extract_metadata(&path);
82 assert_eq!(artist, "Unknown");
83 assert_eq!(album, "Unknown");
84 assert_eq!(title, "song");
85}
diff --git a/tests/playback.rs b/tests/playback.rs
new file mode 100644
index 0000000..80ecf58
--- /dev/null
+++ b/tests/playback.rs
@@ -0,0 +1,175 @@
1use rsp::playback::{PlaybackState, Player, ShuffleMode, Track};
2use std::path::PathBuf;
3
4fn dummy_track(title: &str) -> Track {
5 Track {
6 path: PathBuf::from(format!("/music/{}", title)),
7 title: title.to_string(),
8 artist: "Test Artist".to_string(),
9 album: "Test Album".to_string(),
10 duration: Some(180000),
11 }
12}
13
14#[test]
15fn test_player_default_state() {
16 let player = Player::new();
17 assert_eq!(player.state(), &PlaybackState::Stopped);
18 assert_eq!(player.volume(), 70);
19}
20
21#[test]
22fn test_player_play_with_track_in_queue() {
23 let mut player = Player::new();
24 player.queue_track(dummy_track("Test Track"), "last");
25 player.play();
26 assert_eq!(player.state(), &PlaybackState::Playing);
27 assert!(player.current_track.is_some());
28 assert!(player.queue.is_empty());
29}
30
31#[test]
32fn test_player_play_with_no_track() {
33 let mut player = Player::new();
34 player.play();
35 assert_eq!(player.state(), &PlaybackState::Stopped);
36}
37
38#[test]
39fn test_player_play_track() {
40 let mut player = Player::new();
41 player.play_track(dummy_track("Test Track"));
42 assert_eq!(player.state(), &PlaybackState::Playing);
43 assert!(player.current_track.is_some());
44}
45
46#[test]
47fn test_player_pause() {
48 let mut player = Player::new();
49 player.play_track(dummy_track("Test Track"));
50 player.pause();
51 assert_eq!(player.state(), &PlaybackState::Paused);
52}
53
54#[test]
55fn test_player_pause_when_stopped() {
56 let mut player = Player::new();
57 player.pause();
58 assert_eq!(player.state(), &PlaybackState::Stopped);
59}
60
61#[test]
62fn test_player_resume() {
63 let mut player = Player::new();
64 player.play_track(dummy_track("Test Track"));
65 player.pause();
66 player.resume();
67 assert_eq!(player.state(), &PlaybackState::Playing);
68}
69
70#[test]
71fn test_player_resume_when_stopped() {
72 let mut player = Player::new();
73 player.resume();
74 assert_eq!(player.state(), &PlaybackState::Stopped);
75}
76
77#[test]
78fn test_player_stop() {
79 let mut player = Player::new();
80 player.play_track(dummy_track("Test Track"));
81 player.stop();
82 assert_eq!(player.state(), &PlaybackState::Stopped);
83 assert!(player.current_track.is_none());
84}
85
86#[test]
87fn test_player_next_with_queue() {
88 let mut player = Player::new();
89 player.queue_track(dummy_track("Track 1"), "last");
90 player.queue_track(dummy_track("Track 2"), "last");
91 player.next();
92 assert_eq!(player.current_track.as_ref().unwrap().title, "Track 1");
93}
94
95#[test]
96fn test_player_next_empty_queue() {
97 let mut player = Player::new();
98 player.next();
99 assert_eq!(player.state(), &PlaybackState::Stopped);
100 assert!(player.current_track.is_none());
101}
102
103#[test]
104fn test_player_previous() {
105 let mut player = Player::new();
106 player.play_track(dummy_track("Test Track"));
107 player.previous();
108 assert_eq!(player.state(), &PlaybackState::Playing);
109}
110
111#[test]
112fn test_player_set_volume() {
113 let mut player = Player::new();
114 player.set_volume(50);
115 assert_eq!(player.volume(), 50);
116}
117
118#[test]
119fn test_player_set_volume_caps_at_100() {
120 let mut player = Player::new();
121 player.set_volume(150);
122 assert_eq!(player.volume(), 100);
123}
124
125#[test]
126fn test_player_set_shuffle() {
127 let mut player = Player::new();
128 player.set_shuffle(ShuffleMode::All);
129 assert_eq!(player.shuffle, ShuffleMode::All);
130}
131
132#[test]
133fn test_player_queue_track_now() {
134 let mut player = Player::new();
135 player.queue_track(dummy_track("Track 1"), "now");
136 assert_eq!(player.queue.len(), 1);
137 assert_eq!(player.queue[0].title, "Track 1");
138}
139
140#[test]
141fn test_player_queue_track_next() {
142 let mut player = Player::new();
143 player.queue_track(dummy_track("Track 1"), "last");
144 player.queue_track(dummy_track("Track 2"), "next");
145 assert_eq!(player.queue.len(), 2);
146 assert_eq!(player.queue[0].title, "Track 1");
147 assert_eq!(player.queue[1].title, "Track 2");
148}
149
150#[test]
151fn test_player_queue_track_last() {
152 let mut player = Player::new();
153 player.queue_track(dummy_track("Track 1"), "last");
154 player.queue_track(dummy_track("Track 2"), "last");
155 assert_eq!(player.queue.len(), 2);
156 assert_eq!(player.queue[0].title, "Track 1");
157 assert_eq!(player.queue[1].title, "Track 2");
158}
159
160#[test]
161fn test_player_dequeue_next() {
162 let mut player = Player::new();
163 player.queue_track(dummy_track("Track 1"), "last");
164 let track = player.dequeue_next();
165 assert!(track.is_some());
166 assert_eq!(track.unwrap().title, "Track 1");
167 assert!(player.queue.is_empty());
168}
169
170#[test]
171fn test_player_dequeue_next_empty() {
172 let mut player = Player::new();
173 let track = player.dequeue_next();
174 assert!(track.is_none());
175}
diff --git a/tests/scrobbler.rs b/tests/scrobbler.rs
new file mode 100644
index 0000000..f326250
--- /dev/null
+++ b/tests/scrobbler.rs
@@ -0,0 +1,77 @@
1use rsp::scrobbler::Scrobbler;
2
3#[test]
4fn test_scrobbler_new_with_all_params() {
5 let scrobbler = Scrobbler::new(
6 Some("api_key".to_string()),
7 Some("secret".to_string()),
8 Some("session".to_string()),
9 Some("token".to_string()),
10 );
11 assert!(scrobbler.lastfm_api_key.is_some());
12 assert!(scrobbler.lastfm_api_secret.is_some());
13 assert!(scrobbler.lastfm_session_key.is_some());
14 assert!(scrobbler.listenbrainz_token.is_some());
15}
16
17#[test]
18fn test_scrobbler_new_with_none() {
19 let scrobbler = Scrobbler::new(None, None, None, None);
20 assert!(scrobbler.lastfm_api_key.is_none());
21 assert!(scrobbler.lastfm_api_secret.is_none());
22 assert!(scrobbler.lastfm_session_key.is_none());
23 assert!(scrobbler.listenbrainz_token.is_none());
24}
25
26#[test]
27fn test_scrobbler_now_playing_no_api_key() {
28 let scrobbler = Scrobbler::new(None, None, None, None);
29 scrobbler.now_playing("Artist", "Track", Some("Album"));
30}
31
32#[test]
33fn test_scrobbler_now_playing_with_api_key() {
34 let scrobbler = Scrobbler::new(Some("api_key".to_string()), None, None, None);
35 scrobbler.now_playing("Artist", "Track", Some("Album"));
36}
37
38#[test]
39fn test_scrobbler_scrobble_no_keys() {
40 let scrobbler = Scrobbler::new(None, None, None, None);
41 scrobbler.scrobble("Artist", "Track", Some("Album"), 1234567890);
42}
43
44#[test]
45fn test_scrobbler_scrobble_with_lastfm() {
46 let scrobbler = Scrobbler::new(Some("api_key".to_string()), None, None, None);
47 scrobbler.scrobble("Artist", "Track", Some("Album"), 1234567890);
48}
49
50#[test]
51fn test_scrobbler_scrobble_with_listenbrainz() {
52 let scrobbler = Scrobbler::new(None, None, None, Some("token".to_string()));
53 scrobbler.scrobble("Artist", "Track", Some("Album"), 1234567890);
54}
55
56#[test]
57fn test_scrobbler_scrobble_with_both() {
58 let scrobbler = Scrobbler::new(
59 Some("api_key".to_string()),
60 None,
61 None,
62 Some("token".to_string()),
63 );
64 scrobbler.scrobble("Artist", "Track", Some("Album"), 1234567890);
65}
66
67#[test]
68fn test_scrobbler_now_playing_no_album() {
69 let scrobbler = Scrobbler::new(Some("api_key".to_string()), None, None, None);
70 scrobbler.now_playing("Artist", "Track", None);
71}
72
73#[test]
74fn test_scrobbler_scrobble_no_album() {
75 let scrobbler = Scrobbler::new(Some("api_key".to_string()), None, None, None);
76 scrobbler.scrobble("Artist", "Track", None, 1234567890);
77}