using FluentAssertions; using Microsoft.Extensions.Logging; using Moq; using Speckle.Sdk.Caching; using Speckle.Sdk.Testing; namespace Speckle.Sdk.Tests.Unit; public class ModelCacheManagerMockTests : MoqTest { private readonly Mock _fileSystemMock; private readonly ModelCacheManager _manager; public ModelCacheManagerMockTests() { Mock> loggerMock = Create>(MockBehavior.Loose); _fileSystemMock = Create(); _manager = new ModelCacheManager(loggerMock.Object, _fileSystemMock.Object); } [Fact] public void ClearCache_ShouldNotDeleteFiles_WhenDirectoryDoesNotExist() { _fileSystemMock.Setup(fs => fs.DirectoryExists(It.IsAny())).Returns(false); _manager.ClearCache(); _fileSystemMock.Verify(fs => fs.EnumerateFiles(It.IsAny()), Times.Never); _fileSystemMock.Verify(fs => fs.DeleteFile(It.IsAny()), Times.Never); } [Fact] public void ClearCache_ShouldDeleteFiles_WhenDirectoryExists() { var files = new List { "file1.db", "file2.db" }; _fileSystemMock.Setup(fs => fs.DirectoryExists(It.IsAny())).Returns(true); _fileSystemMock.Setup(fs => fs.EnumerateFiles(It.IsAny())).Returns(files); foreach (var file in files) { _fileSystemMock.Setup(fs => fs.DeleteFile(file)); } _manager.ClearCache(); } [Fact] public void ClearCache_ShouldLogWarning_WhenDeleteFileThrows() { var files = new List { "file1.db" }; _fileSystemMock.Setup(fs => fs.DirectoryExists(It.IsAny())).Returns(true); _fileSystemMock.Setup(fs => fs.EnumerateFiles(It.IsAny())).Returns(files); _fileSystemMock.Setup(fs => fs.DeleteFile(It.IsAny())).Throws(); _manager.ClearCache(); } [Fact] public void GetCacheSize_ShouldReturnZero_WhenDirectoryDoesNotExist() { _fileSystemMock.Setup(fs => fs.DirectoryExists(It.IsAny())).Returns(false); var size = _manager.GetCacheSize(); size.Should().Be(0); } [Fact] public void GetCacheSize_ShouldSumFileSizes() { var files = new List { "file1.db", "file2.db" }; _fileSystemMock.Setup(fs => fs.DirectoryExists(It.IsAny())).Returns(true); _fileSystemMock.Setup(fs => fs.EnumerateFiles(It.IsAny())).Returns(files); _fileSystemMock.Setup(fs => fs.GetFileSize("file1.db")).Returns(10); _fileSystemMock.Setup(fs => fs.GetFileSize("file2.db")).Returns(20); var size = _manager.GetCacheSize(); size.Should().Be(30); } [Fact] public void GetCacheSize_ShouldLogWarning_WhenGetFileSizeThrows() { var files = new List { "file1.db" }; _fileSystemMock.Setup(fs => fs.DirectoryExists(It.IsAny())).Returns(true); _fileSystemMock.Setup(fs => fs.EnumerateFiles(It.IsAny())).Returns(files); _fileSystemMock.Setup(fs => fs.GetFileSize(It.IsAny())).Throws(); var size = _manager.GetCacheSize(); size.Should().Be(0); } }