using Explorer.Application; using Explorer.Contracts; using Explorer.Domain; namespace Explorer.Application.Tests; public class WorkbenchHostTests { [Fact] public void Forwards_indexing_and_transfer_sessions() { var indexing = new FakeIndexing(); var transfers = new FakeTransfers(); IWorkbenchHost host = new WorkbenchHost(indexing, transfers); Assert.Same(indexing, host.Indexing); Assert.Same(transfers, host.Transfers); host.Indexing.EnqueueFullScan(7); host.Transfers.PauseAll(); Assert.Equal(7, indexing.FullScanId); Assert.True(transfers.PausedAll); } private sealed class FakeIndexing : IIndexingHost { public long FullScanId { get; private set; } public event EventHandler? ProgressChanged; public void EnqueueFullScan(long sourceId) => FullScanId = sourceId; public void EnqueueFolderScan(long sourceId, string pathRel) { } public void EnqueueReconcile(long sourceId, string pathRel) { } public void Cancel(long sourceId) { } public void Raise() => ProgressChanged?.Invoke(this, new ScanProgress { SourceId = 1, CurrentPath = "", Status = ScanJobStatus.Running }); } private sealed class FakeTransfers : ITransferHost { public bool PausedAll { get; private set; } public event EventHandler? Changed = delegate { }; public event EventHandler? JobFinished = delegate { }; public bool IsPaused => PausedAll; public IReadOnlyList Snapshot() => []; public void PauseAll() => PausedAll = true; public void ResumeAll() => PausedAll = false; public void Pause(long jobId) { } public void Resume(long jobId) { } public void Retry(long jobId) { } public void Cancel(long jobId) { } public void Dismiss(long jobId) { } public void ClearFinished() { } public bool MoveUp(long jobId) => false; public bool MoveDown(long jobId) => false; } }