From 5f2d1897b245fbee12d17b5910eaf5233ca6802b Mon Sep 17 00:00:00 2001 From: salmonik Date: Tue, 5 May 2026 23:29:39 +0200 Subject: Add unit tests in /tests directory for config, database, playback, and scrobbler modules --- tests/playback.rs | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 tests/playback.rs (limited to 'tests/playback.rs') 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 @@ +use rsp::playback::{PlaybackState, Player, ShuffleMode, Track}; +use std::path::PathBuf; + +fn dummy_track(title: &str) -> Track { + Track { + path: PathBuf::from(format!("/music/{}", title)), + title: title.to_string(), + artist: "Test Artist".to_string(), + album: "Test Album".to_string(), + duration: Some(180000), + } +} + +#[test] +fn test_player_default_state() { + let player = Player::new(); + assert_eq!(player.state(), &PlaybackState::Stopped); + assert_eq!(player.volume(), 70); +} + +#[test] +fn test_player_play_with_track_in_queue() { + let mut player = Player::new(); + player.queue_track(dummy_track("Test Track"), "last"); + player.play(); + assert_eq!(player.state(), &PlaybackState::Playing); + assert!(player.current_track.is_some()); + assert!(player.queue.is_empty()); +} + +#[test] +fn test_player_play_with_no_track() { + let mut player = Player::new(); + player.play(); + assert_eq!(player.state(), &PlaybackState::Stopped); +} + +#[test] +fn test_player_play_track() { + let mut player = Player::new(); + player.play_track(dummy_track("Test Track")); + assert_eq!(player.state(), &PlaybackState::Playing); + assert!(player.current_track.is_some()); +} + +#[test] +fn test_player_pause() { + let mut player = Player::new(); + player.play_track(dummy_track("Test Track")); + player.pause(); + assert_eq!(player.state(), &PlaybackState::Paused); +} + +#[test] +fn test_player_pause_when_stopped() { + let mut player = Player::new(); + player.pause(); + assert_eq!(player.state(), &PlaybackState::Stopped); +} + +#[test] +fn test_player_resume() { + let mut player = Player::new(); + player.play_track(dummy_track("Test Track")); + player.pause(); + player.resume(); + assert_eq!(player.state(), &PlaybackState::Playing); +} + +#[test] +fn test_player_resume_when_stopped() { + let mut player = Player::new(); + player.resume(); + assert_eq!(player.state(), &PlaybackState::Stopped); +} + +#[test] +fn test_player_stop() { + let mut player = Player::new(); + player.play_track(dummy_track("Test Track")); + player.stop(); + assert_eq!(player.state(), &PlaybackState::Stopped); + assert!(player.current_track.is_none()); +} + +#[test] +fn test_player_next_with_queue() { + let mut player = Player::new(); + player.queue_track(dummy_track("Track 1"), "last"); + player.queue_track(dummy_track("Track 2"), "last"); + player.next(); + assert_eq!(player.current_track.as_ref().unwrap().title, "Track 1"); +} + +#[test] +fn test_player_next_empty_queue() { + let mut player = Player::new(); + player.next(); + assert_eq!(player.state(), &PlaybackState::Stopped); + assert!(player.current_track.is_none()); +} + +#[test] +fn test_player_previous() { + let mut player = Player::new(); + player.play_track(dummy_track("Test Track")); + player.previous(); + assert_eq!(player.state(), &PlaybackState::Playing); +} + +#[test] +fn test_player_set_volume() { + let mut player = Player::new(); + player.set_volume(50); + assert_eq!(player.volume(), 50); +} + +#[test] +fn test_player_set_volume_caps_at_100() { + let mut player = Player::new(); + player.set_volume(150); + assert_eq!(player.volume(), 100); +} + +#[test] +fn test_player_set_shuffle() { + let mut player = Player::new(); + player.set_shuffle(ShuffleMode::All); + assert_eq!(player.shuffle, ShuffleMode::All); +} + +#[test] +fn test_player_queue_track_now() { + let mut player = Player::new(); + player.queue_track(dummy_track("Track 1"), "now"); + assert_eq!(player.queue.len(), 1); + assert_eq!(player.queue[0].title, "Track 1"); +} + +#[test] +fn test_player_queue_track_next() { + let mut player = Player::new(); + player.queue_track(dummy_track("Track 1"), "last"); + player.queue_track(dummy_track("Track 2"), "next"); + assert_eq!(player.queue.len(), 2); + assert_eq!(player.queue[0].title, "Track 1"); + assert_eq!(player.queue[1].title, "Track 2"); +} + +#[test] +fn test_player_queue_track_last() { + let mut player = Player::new(); + player.queue_track(dummy_track("Track 1"), "last"); + player.queue_track(dummy_track("Track 2"), "last"); + assert_eq!(player.queue.len(), 2); + assert_eq!(player.queue[0].title, "Track 1"); + assert_eq!(player.queue[1].title, "Track 2"); +} + +#[test] +fn test_player_dequeue_next() { + let mut player = Player::new(); + player.queue_track(dummy_track("Track 1"), "last"); + let track = player.dequeue_next(); + assert!(track.is_some()); + assert_eq!(track.unwrap().title, "Track 1"); + assert!(player.queue.is_empty()); +} + +#[test] +fn test_player_dequeue_next_empty() { + let mut player = Player::new(); + let track = player.dequeue_next(); + assert!(track.is_none()); +} -- cgit v1.2.3