using System.Collections.ObjectModel;
using System.IO;
using Everything2Everything.App.Views;
using Xunit;
namespace Everything2Everything.Tests;
///
/// 큐 일괄 처리(Batch Actions) TDD 단위 테스트 스위트
/// 전체 선택/해제, 선택 항목 삭제, 완료 항목 정리, 일괄 출력 형식 변경 검증
///
public class BatchQueueActionsTests
{
private static QueueItem CreateItem(string path, string outExt = ".jpg") =>
new()
{
SourcePath = path,
FileName = Path.GetFileName(path),
SelectedOutputExtension = outExt,
StateText = "queued",
};
[Fact]
public void BatchChangeOutput_UpdatesEligibleItems()
{
var items = new ObservableCollection
{
CreateItem("a.png", ".jpg"),
CreateItem("b.png", ".jpg"),
CreateItem("c.mp4", ".mp4"),
};
// .webp 지원 여부에 따라 이미지(a.png, b.png)만 .webp로 일괄 변경
BatchQueueService.BatchChangeOutput(items, ".webp", new[] { ".png", ".jpg" });
Assert.Equal(".webp", items[0].SelectedOutputExtension);
Assert.Equal(".webp", items[1].SelectedOutputExtension);
Assert.Equal(".mp4", items[2].SelectedOutputExtension); // mp4는 제외
}
[Fact]
public void RemoveSelected_RemovesOnlySelectedItems()
{
var items = new ObservableCollection
{
CreateItem("1.png"),
CreateItem("2.png"),
CreateItem("3.png"),
};
items[0].IsSelected = true;
items[2].IsSelected = true;
BatchQueueService.RemoveSelected(items);
Assert.Single(items);
Assert.Equal("2.png", items[0].FileName);
}
[Fact]
public void ClearCompleted_RemovesOnlyDoneItems()
{
var i1 = CreateItem("1.png"); i1.SetState("done");
var i2 = CreateItem("2.png"); i2.SetState("45%");
var i3 = CreateItem("3.png"); i3.SetState("queued");
var i4 = CreateItem("4.png"); i4.SetState("done");
var items = new ObservableCollection { i1, i2, i3, i4 };
BatchQueueService.ClearCompleted(items);
Assert.Equal(2, items.Count);
Assert.All(items, item => Assert.False(item.IsDone));
}
[Fact]
public void SelectAll_TogglesAllItems()
{
var items = new ObservableCollection
{
CreateItem("1.png"),
CreateItem("2.png"),
};
BatchQueueService.SetSelectionAll(items, true);
Assert.All(items, item => Assert.True(item.IsSelected));
BatchQueueService.SetSelectionAll(items, false);
Assert.All(items, item => Assert.False(item.IsSelected));
}
}