maksit-core/src/MaksIT.Core.Tests/Logging/FileLoggerTests.cs

107 lines
3.7 KiB
C#

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using MaksIT.Core.Logging;
namespace MaksIT.Core.Tests.Logging;
public class FileLoggerTests {
private readonly string _testFolderPath;
public FileLoggerTests() {
_testFolderPath = Path.Combine(Path.GetTempPath(), "FileLoggerTests");
if (Directory.Exists(_testFolderPath)) {
Directory.Delete(_testFolderPath, true);
}
Directory.CreateDirectory(_testFolderPath);
}
[Fact]
public void ShouldWriteLogsToCorrectFile() {
// Arrange
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IHostEnvironment>(sp =>
new TestHostEnvironment {
EnvironmentName = Environments.Development,
ApplicationName = "TestApp",
ContentRootPath = Directory.GetCurrentDirectory()
});
serviceCollection.AddLogging(builder => builder.AddFileLogger(_testFolderPath, TimeSpan.FromDays(7)));
var provider = serviceCollection.BuildServiceProvider();
var logger = provider.GetRequiredService<ILogger<FileLoggerTests>>();
// Act
logger.LogInformation("Test log message");
// Assert
var logFile = Directory.GetFiles(_testFolderPath, "log_*.txt").FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("Test log message", logContent);
}
[Fact]
public void ShouldDeleteOldLogsBasedOnRetention() {
// Arrange
var retentionPeriod = TimeSpan.FromDays(1);
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IHostEnvironment>(sp =>
new TestHostEnvironment {
EnvironmentName = Environments.Development,
ApplicationName = "TestApp",
ContentRootPath = Directory.GetCurrentDirectory()
});
serviceCollection.AddLogging(builder => builder.AddFileLogger(_testFolderPath, retentionPeriod));
var provider = serviceCollection.BuildServiceProvider();
var logger = provider.GetRequiredService<ILogger<FileLoggerTests>>();
// Create an old log file
var oldLogFile = Path.Combine(_testFolderPath, $"log_{DateTime.Now.AddDays(-2):yyyy-MM-dd}.txt");
File.WriteAllText(oldLogFile, "Old log");
// Act
logger.LogInformation("New log message");
// Assert
Assert.False(File.Exists(oldLogFile), "Old log file should have been deleted.");
var logFile = Directory.GetFiles(_testFolderPath, "log_*.txt").FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("New log message", logContent);
}
[Fact]
public void ShouldHandleExceptionsGracefully() {
// Arrange
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<IHostEnvironment>(sp =>
new TestHostEnvironment {
EnvironmentName = Environments.Development,
ApplicationName = "TestApp",
ContentRootPath = Directory.GetCurrentDirectory()
});
serviceCollection.AddLogging(builder => builder.AddFileLogger(_testFolderPath));
var provider = serviceCollection.BuildServiceProvider();
var logger = provider.GetRequiredService<ILogger<FileLoggerTests>>();
// Act & Assert
try {
logger.LogError(new InvalidOperationException("Test exception"), "An error occurred");
var logFile = Directory.GetFiles(_testFolderPath, "log_*.txt").FirstOrDefault();
Assert.NotNull(logFile);
var logContent = File.ReadAllText(logFile);
Assert.Contains("An error occurred", logContent);
Assert.Contains("Test exception", logContent);
} catch {
Assert.Fail("Logger should handle exceptions gracefully.");
}
}
}