Files
harmonia/Harmonia.Tests/PlaylistTests.cs

266 lines
6.5 KiB
C#

using Harmonia.Core.Models;
using Harmonia.Core.Playlists;
using NSubstitute;
using Shouldly;
using System.ComponentModel;
namespace Harmonia.Tests;
public class PlaylistTests
{
[Fact]
public void Create_Playlist()
{
Playlist playlist = new();
playlist.Name.ShouldBeNull();
playlist.Songs.ShouldBeEmpty();
}
[Fact]
public void Create_Playlist_With_Name()
{
Playlist playlist = new("My Playlist");
playlist.Name.ShouldBe("My Playlist");
playlist.Songs.ShouldBeEmpty();
}
[Fact]
public void Set_Playlist_Name()
{
Playlist playlist = new();
playlist.Name.ShouldBeNull();
playlist.SetName("My Playlist");
playlist.Name.ShouldBe("My Playlist");
}
[Fact]
public void Add_Songs()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" }
];
playlist.AddSongs(songs);
playlist.Songs.Count.ShouldBe(3);
Song song = new() { FileName = "Song4.mp3" };
playlist.AddSong(song);
playlist.Songs.Count.ShouldBe(4);
playlist.Songs[3].Song.FileName.ShouldBe("Song4.mp3");
Song song2 = new() { FileName = "Song5.mp3" };
playlist.AddSong(song2, 1);
playlist.Songs.Count.ShouldBe(5);
playlist.Songs[1].Song.FileName.ShouldBe("Song5.mp3");
}
[Fact]
public void Move_Songs()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" },
new Song() { FileName = "Song4.mp3" },
new Song() { FileName = "Song5.mp3" },
];
playlist.AddSongs(songs);
playlist.MoveSong(2, 3);
string[] expectedFileNames =
[
"Song1.mp3",
"Song2.mp3",
"Song4.mp3",
"Song3.mp3",
"Song5.mp3"
];
playlist.Songs.Select(x => x.Song.FileName).ToArray()
.ShouldBeEquivalentTo(expectedFileNames);
}
[Fact]
public void Remove_Duplicate_Songs()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" },
new Song() { FileName = "Song4.mp3" },
new Song() { FileName = "Song5.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" },
];
playlist.AddSongs(songs);
playlist.RemoveDuplicateSongs();
string[] expectedFileNames =
[
"Song1.mp3",
"Song2.mp3",
"Song3.mp3",
"Song4.mp3",
"Song5.mp3"
];
playlist.Songs.Select(x => x.Song.FileName).ToArray()
.ShouldBeEquivalentTo(expectedFileNames);
}
[Fact]
public void Sort_Songs()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3", Album = "Album 2", TrackNumber = 2 },
new Song() { FileName = "Song2.mp3", Album = "Album 1", TrackNumber = 2 },
new Song() { FileName = "Song3.mp3", Album = "Album 2", TrackNumber = 1 },
new Song() { FileName = "Song4.mp3", Album = "Album 1", TrackNumber = 1 },
new Song() { FileName = "Song5.mp3", Album = "Album 2", TrackNumber = 3 },
];
playlist.AddSongs(songs);
SortOption[] sortOptions =
[
new("Album", ListSortDirection.Ascending),
new("TrackNumber", ListSortDirection.Ascending)
];
playlist.SortSongs([.. playlist.Songs], sortOptions);
string[] expectedSortedFileNames =
[
"Song4.mp3",
"Song2.mp3",
"Song3.mp3",
"Song1.mp3",
"Song5.mp3"
];
playlist.Songs.Select(x => x.Song.FileName).ToArray()
.ShouldBeEquivalentTo(expectedSortedFileNames);
}
[Fact]
public void Reverse_Songs()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" }
];
playlist.AddSongs(songs);
PlaylistSong[] playlistSongs = [.. playlist.Songs];
playlist.Reverse(playlistSongs);
string[] expectedReversedFileNames =
[
"Song3.mp3",
"Song2.mp3",
"Song1.mp3"
];
playlist.Songs.Select(x => x.Song.FileName).ToArray()
.ShouldBeEquivalentTo(expectedReversedFileNames);
}
[Fact]
public void Remove_Songs()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" }
];
playlist.AddSongs(songs);
playlist.RemoveSong(1);
string[] expectedFileNames =
[
"Song1.mp3",
"Song3.mp3"
];
playlist.Songs.Select(x => x.Song.FileName).ToArray()
.ShouldBeEquivalentTo(expectedFileNames);
}
[Fact]
public void Lock_And_Unlock_Playlist()
{
Playlist playlist = new();
Song[] songs =
[
new Song() { FileName = "Song1.mp3" },
new Song() { FileName = "Song2.mp3" },
new Song() { FileName = "Song3.mp3" }
];
playlist.AddSongs(songs);
playlist.IsLocked.ShouldBeFalse();
playlist.Lock();
playlist.IsLocked.ShouldBeTrue();
Song song = new() { FileName = "Song4.mp3" };
playlist.AddSong(song);
playlist.Songs.Count.ShouldBe(3);
playlist.RemoveSong(0);
playlist.Songs.Count.ShouldBe(3);
playlist.MoveSong(0, 2);
string[] expectedMovedFileNamesOnLockedPlaylist =
[
"Song1.mp3",
"Song2.mp3",
"Song3.mp3"
];
playlist.Songs.Select(x => x.Song.FileName).ToArray()
.ShouldBeEquivalentTo(expectedMovedFileNamesOnLockedPlaylist);
playlist.Unlock();
playlist.IsLocked.ShouldBeFalse();
}
}