164 lines
4.5 KiB
C#
164 lines
4.5 KiB
C#
using System.IO;
|
|
|
|
using SongTidy.Models;
|
|
using SongTidy.ViewModels;
|
|
|
|
namespace SongTidy.Tests.ViewModels;
|
|
|
|
/// <summary>
|
|
/// Contains tests for <see cref="SongEntryViewModel"/>.
|
|
/// </summary>
|
|
[TestClass]
|
|
public sealed class SongEntryViewModelTests {
|
|
#region Preview
|
|
|
|
/// <summary>
|
|
/// Verifies the initial fields and target preview.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void InitializesFieldsAndTargetPreview() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
|
|
Assert.AreEqual("Artist", entry.Artist);
|
|
Assert.AreEqual("Title", entry.Title);
|
|
Assert.AreEqual("Live", entry.Comment);
|
|
Assert.AreEqual(RenameFormat.ArtistFirst, entry.Format);
|
|
Assert.AreEqual("A.mp3", entry.OriginalFileName);
|
|
Assert.AreEqual("Artist - Title (Live).mp3", entry.TargetFileName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies that changing a field immediately updates the target preview.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void UpdatesTargetPreviewWhenFieldChanges() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
|
|
entry.Artist = "New Artist";
|
|
|
|
Assert.AreEqual("New Artist - Title (Live).mp3", entry.TargetFileName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies that changing the format updates the target preview.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void UpdatesTargetPreviewWhenFormatChanges() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
|
|
entry.Format = RenameFormat.TitleFirst;
|
|
|
|
Assert.AreEqual("Title (Live) - Artist.mp3", entry.TargetFileName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies that the original extension is preserved for other file types.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void PreservesOriginalExtension() {
|
|
SongEntryViewModel entry = new(
|
|
Path.Combine("Music", "A.flac"),
|
|
string.Empty,
|
|
"Title",
|
|
string.Empty,
|
|
RenameFormat.ArtistFirst);
|
|
|
|
Assert.AreEqual("Title.flac", entry.TargetFileName);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Dirty notifications
|
|
|
|
/// <summary>
|
|
/// Verifies that editing any field raises the edited event.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void RaisesEditedWhenFieldChanges() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
int editCount = 0;
|
|
entry.Edited += (_, _) => editCount++;
|
|
|
|
entry.Artist = "New Artist";
|
|
entry.Title = "New Title";
|
|
entry.Comment = "New Comment";
|
|
|
|
Assert.AreEqual(3, editCount);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies that assigning the current value does not raise the edited event.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void DoesNotRaiseEditedWhenFieldValueIsUnchanged() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
int editCount = 0;
|
|
entry.Edited += (_, _) => editCount++;
|
|
|
|
entry.Artist = entry.Artist;
|
|
|
|
Assert.AreEqual(0, editCount);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies that changing the format does not itself count as a field edit.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void ChangingFormatDoesNotRaiseEdited() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
int editCount = 0;
|
|
entry.Edited += (_, _) => editCount++;
|
|
|
|
entry.Format = RenameFormat.TitleFirst;
|
|
|
|
Assert.AreEqual(0, editCount);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Swap
|
|
|
|
/// <summary>
|
|
/// Verifies that swapping exchanges the artist and title values.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void SwapsArtistAndTitle() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
|
|
entry.SwapArtistAndTitle();
|
|
|
|
Assert.AreEqual("Title", entry.Artist);
|
|
Assert.AreEqual("Artist", entry.Title);
|
|
Assert.AreEqual("Title - Artist (Live).mp3", entry.TargetFileName);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Verifies that swapping raises edited notifications for both changed fields.
|
|
/// </summary>
|
|
[TestMethod]
|
|
public void SwapRaisesEditedForBothFields() {
|
|
SongEntryViewModel entry = CreateEntry();
|
|
int editCount = 0;
|
|
entry.Edited += (_, _) => editCount++;
|
|
|
|
entry.SwapArtistAndTitle();
|
|
|
|
Assert.AreEqual(2, editCount);
|
|
}
|
|
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Creates a standard test entry.
|
|
/// </summary>
|
|
/// <returns>The created entry.</returns>
|
|
private static SongEntryViewModel CreateEntry() {
|
|
return new SongEntryViewModel(
|
|
Path.Combine("Music", "A.mp3"),
|
|
"Artist",
|
|
"Title",
|
|
"Live",
|
|
RenameFormat.ArtistFirst);
|
|
}
|
|
}
|