MCPcopy Create free account
hub / github.com/Moosync/Moosync / test_remove_songs

Function test_remove_songs

src-tauri/database/src/test.rs:210–291  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

208// Test removing songs
209#[test]
210fn test_remove_songs() {
211 let db_path = get_test_db_path();
212 let db = Database::new(db_path.clone());
213
214 // Insert test songs
215 let songs = db
216 .insert_songs(vec![
217 create_test_song("Song to Keep", "/path/to/keep.mp3"),
218 create_test_song("Song to Remove", "/path/to/remove.mp3"),
219 ])
220 .unwrap();
221
222 // Get IDs
223 let keep_id = songs[0].song._id.clone().unwrap();
224 let remove_id = songs[1].song._id.clone().unwrap();
225
226 // Make sure we have 2 songs before removing
227 let initial_songs = db
228 .get_songs_by_options(GetSongOptions {
229 song: Some(SearchableSong {
230 type_: Some(SongType::LOCAL), // Filter by song type to ensure we get all test songs
231 ..Default::default()
232 }),
233 inclusive: Some(true),
234 ..Default::default()
235 })
236 .unwrap();
237 assert_eq!(initial_songs.len(), 2);
238
239 // Add analytics data to both songs
240 db.increment_play_count(keep_id.clone()).unwrap();
241 db.increment_play_count(remove_id.clone()).unwrap();
242 db.increment_play_time(keep_id.clone(), 60.0).unwrap();
243 db.increment_play_time(remove_id.clone(), 120.0).unwrap();
244
245 // Remove one song
246 db.remove_songs(vec![remove_id.clone()]).unwrap();
247
248 // Verify only one song remains
249 let all_songs = db
250 .get_songs_by_options(GetSongOptions {
251 song: Some(SearchableSong {
252 type_: Some(SongType::LOCAL), // Filter by song type to ensure we get all remaining songs
253 ..Default::default()
254 }),
255 inclusive: Some(true),
256 ..Default::default()
257 })
258 .unwrap();
259 assert_eq!(all_songs.len(), 1);
260 assert_eq!(all_songs[0].song._id.as_ref().unwrap(), &keep_id);
261
262 // Verify analytics data for the removed song is also gone
263 let analytics = db.get_top_listened_songs().unwrap();
264 let removed_song_analytics = analytics.songs.iter().find(|(id, _)| id == &remove_id);
265 assert!(
266 removed_song_analytics.is_none(),
267 "Analytics for removed song should be deleted"

Callers

nothing calls this directly

Calls 9

get_test_db_pathFunction · 0.85
cleanupFunction · 0.85
cloneMethod · 0.80
insert_songsMethod · 0.80
get_songs_by_optionsMethod · 0.80
increment_play_countMethod · 0.80
increment_play_timeMethod · 0.80
remove_songsMethod · 0.80

Tested by

no test coverage detected