Add patterned rename and Move to, and keep settings, selection, and queue speed from resetting.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
106
tests/Explorer.Application.Tests/FilenamePatternTests.cs
Normal file
106
tests/Explorer.Application.Tests/FilenamePatternTests.cs
Normal file
@@ -0,0 +1,106 @@
|
||||
using Explorer.Application;
|
||||
using Explorer.Domain;
|
||||
|
||||
namespace Explorer.Application.Tests;
|
||||
|
||||
public class FilenamePatternTests
|
||||
{
|
||||
[Fact]
|
||||
public void Formats_artist_title_and_dates()
|
||||
{
|
||||
var tags = new MediaTagFields
|
||||
{
|
||||
Artist = "Pink Floyd",
|
||||
Title = "Comfortably Numb",
|
||||
Track = 6,
|
||||
Created = new DateTimeOffset(new DateTime(2024, 8, 26, 12, 0, 0, DateTimeKind.Local)),
|
||||
Stem = "clip",
|
||||
Extension = "mp3",
|
||||
Width = 1920
|
||||
};
|
||||
Assert.Equal(
|
||||
"Pink Floyd - Comfortably Numb",
|
||||
FilenamePattern.Expand("{Artist} - {Title}", tags));
|
||||
Assert.Equal("06", FilenamePattern.Expand("{Track:00}", tags));
|
||||
Assert.Equal("2024-08-26", FilenamePattern.Expand("{CreatedDate}", tags));
|
||||
Assert.Equal("1920_clip", FilenamePattern.Expand("{Width}_{Name}", tags));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parses_filename_into_tags()
|
||||
{
|
||||
Assert.True(FilenamePattern.TryParse(
|
||||
"{Artist} - {Title}",
|
||||
"AC/DC - Hells Bells",
|
||||
out var tags,
|
||||
out _));
|
||||
Assert.Equal("AC/DC", tags.Artist);
|
||||
Assert.Equal("Hells Bells", tags.Title);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parse_fails_when_the_name_does_not_match()
|
||||
{
|
||||
Assert.False(FilenamePattern.TryParse("{Artist} - {Title}", "JustOneName", out _, out var error));
|
||||
Assert.Contains("match", error, StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Unknown_tokens_stay_in_the_name()
|
||||
{
|
||||
Assert.Equal("{Foo}_a", FilenamePattern.Expand("{Foo}_{Name}", new MediaTagFields { Stem = "a" }));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Sanitizes_illegal_filename_characters_from_tags()
|
||||
{
|
||||
var name = FilenamePattern.Expand("{Title}", new MediaTagFields { Title = @"a:b/c" });
|
||||
Assert.Equal("a-b-c", name);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Taken_date_and_project_expand()
|
||||
{
|
||||
var tags = new MediaTagFields
|
||||
{
|
||||
Taken = new DateTimeOffset(new DateTime(2024, 8, 26, 15, 30, 0, DateTimeKind.Local)),
|
||||
Created = new DateTimeOffset(new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Local)),
|
||||
Stem = "DSC_001",
|
||||
Project = "Explorer",
|
||||
Parent = "photos"
|
||||
};
|
||||
Assert.Equal("20240826_DSC_001", FilenamePattern.Expand("{TakenDate:yyyyMMdd}_{Name}", tags));
|
||||
Assert.Equal("2024-08-26", FilenamePattern.Expand("{CreatedDate}", tags));
|
||||
Assert.Equal("Explorer_DSC_001", FilenamePattern.Expand("{Project}_{Name}", tags));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Parses_taken_date_from_filename()
|
||||
{
|
||||
Assert.True(FilenamePattern.TryParse(
|
||||
"{TakenDate:yyyyMMdd}_{Name}",
|
||||
"20240826_DSC_001",
|
||||
out var tags,
|
||||
out _));
|
||||
Assert.Equal(2024, tags.Taken?.Year);
|
||||
Assert.Equal(8, tags.Taken?.Month);
|
||||
Assert.Equal(26, tags.Taken?.Day);
|
||||
Assert.Equal(2024, tags.Year);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void WithProject_uses_repo_folder_then_parent()
|
||||
{
|
||||
var fields = new MediaTagFields { Parent = "photos" };
|
||||
Assert.Equal("Explorer", FilenamePattern.WithProject(fields, @"C:\src\Explorer").Project);
|
||||
Assert.Equal("photos", FilenamePattern.WithProject(fields, null).Project);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TakenDate_is_media_content_CreatedDate_and_Project_are_not()
|
||||
{
|
||||
Assert.True(FilenamePattern.UsesMediaContent("{TakenDate}_{Name}"));
|
||||
Assert.False(FilenamePattern.UsesMediaContent("{CreatedDate}_{Name}"));
|
||||
Assert.False(FilenamePattern.UsesMediaContent("{Project}_{Name}"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user