Files
PLib/tests/PLib.Tests/Library/InMemoryVideoRepository.cs
T

51 lines
1.6 KiB
C#

using PLib.Application.Abstractions;
using PLib.Application.Library;
using PLib.Domain.Videos;
namespace PLib.Tests.Library;
/// <summary>
/// A hand-written double rather than a mock: the scan logic is all about what ends up in the
/// repository, so the tests read better when they can just look at the resulting list.
/// </summary>
internal sealed class InMemoryVideoRepository : IVideoRepository
{
private readonly Dictionary<string, VideoItem> _items = new(LibraryPathComparer.Instance);
public int SaveCount { get; private set; }
public IReadOnlyCollection<VideoItem> Items => _items.Values;
public void Seed(params VideoItem[] items)
{
foreach (var item in items)
{
_items[item.FullPath] = item;
}
}
public Task<IReadOnlyList<VideoItem>> GetAllAsync(CancellationToken cancellationToken = default) =>
Task.FromResult<IReadOnlyList<VideoItem>>([.. _items.Values]);
public Task<VideoItem?> FindByPathAsync(string fullPath, CancellationToken cancellationToken = default) =>
Task.FromResult(_items.GetValueOrDefault(fullPath));
public Task AddAsync(VideoItem item, CancellationToken cancellationToken = default)
{
_items[item.FullPath] = item;
return Task.CompletedTask;
}
public Task RemoveAsync(VideoItem item, CancellationToken cancellationToken = default)
{
_items.Remove(item.FullPath);
return Task.CompletedTask;
}
public Task SaveChangesAsync(CancellationToken cancellationToken = default)
{
SaveCount++;
return Task.CompletedTask;
}
}