add tests
All checks were successful
SonarQube / Build and analyze (push) Successful in 3m39s

This commit is contained in:
Leonid Pershin
2025-10-21 02:30:04 +03:00
parent 928ae0555e
commit 2a26e84100
15 changed files with 1837 additions and 61 deletions

View File

@@ -261,4 +261,234 @@ public class ChatSessionRepositoryTests : TestBase
var remainingSessions = await _repository.GetActiveSessionsCountAsync();
remainingSessions.Should().Be(1);
}
[Fact]
public async Task GetMessagesAsync_ShouldReturnMessages_WhenMessagesExist()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
await _repository.AddMessageAsync(session.Id, "Message 1", "User", 0);
await _repository.AddMessageAsync(session.Id, "Message 2", "Assistant", 1);
// Act
var messages = await _repository.GetMessagesAsync(session.Id);
// Assert
messages.Should().HaveCount(2);
messages[0].Content.Should().Be("Message 1");
messages[0].Role.Should().Be("User");
messages[1].Content.Should().Be("Message 2");
messages[1].Role.Should().Be("Assistant");
}
[Fact]
public async Task GetMessagesAsync_ShouldReturnEmptyList_WhenNoMessages()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
// Act
var messages = await _repository.GetMessagesAsync(session.Id);
// Assert
messages.Should().BeEmpty();
}
[Fact]
public async Task AddMessageAsync_ShouldAddMessage()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
// Act
var message = await _repository.AddMessageAsync(session.Id, "Test message", "User", 0);
// Assert
message.Should().NotBeNull();
message.Content.Should().Be("Test message");
message.Role.Should().Be("User");
message.MessageOrder.Should().Be(0);
message.SessionId.Should().Be(session.Id);
var messages = await _repository.GetMessagesAsync(session.Id);
messages.Should().HaveCount(1);
}
[Fact]
public async Task ClearMessagesAsync_ShouldRemoveAllMessages()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
await _repository.AddMessageAsync(session.Id, "Message 1", "User", 0);
await _repository.AddMessageAsync(session.Id, "Message 2", "Assistant", 1);
await _repository.AddMessageAsync(session.Id, "Message 3", "User", 2);
// Act
await _repository.ClearMessagesAsync(session.Id);
// Assert
var messages = await _repository.GetMessagesAsync(session.Id);
messages.Should().BeEmpty();
}
[Fact]
public async Task GetSessionsForCleanupAsync_ShouldReturnOldSessions()
{
// Arrange
CleanupDatabase();
var oldSession1 = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
oldSession1.LastUpdatedAt = DateTime.UtcNow.AddDays(-2);
var oldSession2 = TestDataBuilder.Mocks.CreateChatSessionEntity(2, 12346);
oldSession2.LastUpdatedAt = DateTime.UtcNow.AddHours(-25);
var recentSession = TestDataBuilder.Mocks.CreateChatSessionEntity(3, 12347);
recentSession.LastUpdatedAt = DateTime.UtcNow.AddMinutes(-30);
_dbContext.ChatSessions.AddRange(oldSession1, oldSession2, recentSession);
await _dbContext.SaveChangesAsync();
// Act
var sessionsForCleanup = await _repository.GetSessionsForCleanupAsync(24);
// Assert
sessionsForCleanup.Should().HaveCount(2);
sessionsForCleanup.Should().Contain(s => s.ChatId == 12345);
sessionsForCleanup.Should().Contain(s => s.ChatId == 12346);
sessionsForCleanup.Should().NotContain(s => s.ChatId == 12347);
}
[Fact]
public async Task GetSessionsForCleanupAsync_ShouldReturnEmptyList_WhenNoOldSessions()
{
// Arrange
CleanupDatabase();
var recentSession = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
recentSession.LastUpdatedAt = DateTime.UtcNow.AddMinutes(-30);
_dbContext.ChatSessions.Add(recentSession);
await _dbContext.SaveChangesAsync();
// Act
var sessionsForCleanup = await _repository.GetSessionsForCleanupAsync(24);
// Assert
sessionsForCleanup.Should().BeEmpty();
}
[Fact]
public async Task UpdateAsync_ShouldUpdateLastUpdatedAt()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
var originalLastUpdated = DateTime.UtcNow.AddDays(-1);
session.LastUpdatedAt = originalLastUpdated;
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
// Act
session.Model = "new-model";
var updatedSession = await _repository.UpdateAsync(session);
// Assert
updatedSession.LastUpdatedAt.Should().BeAfter(originalLastUpdated);
updatedSession.Model.Should().Be("new-model");
}
[Fact]
public async Task GetByChatIdAsync_ShouldIncludeMessages()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
await _repository.AddMessageAsync(session.Id, "Test message", "User", 0);
// Act
var retrievedSession = await _repository.GetByChatIdAsync(12345);
// Assert
retrievedSession.Should().NotBeNull();
retrievedSession!.Messages.Should().HaveCount(1);
retrievedSession.Messages.First().Content.Should().Be("Test message");
}
[Fact]
public async Task GetBySessionIdAsync_ShouldIncludeMessages()
{
// Arrange
CleanupDatabase();
var sessionId = "test-session-id";
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345, sessionId);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
await _repository.AddMessageAsync(session.Id, "Test message", "User", 0);
// Act
var retrievedSession = await _repository.GetBySessionIdAsync(sessionId);
// Assert
retrievedSession.Should().NotBeNull();
retrievedSession!.Messages.Should().HaveCount(1);
}
[Fact]
public async Task AddMessageAsync_WithMultipleMessages_ShouldMaintainOrder()
{
// Arrange
CleanupDatabase();
var session = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
_dbContext.ChatSessions.Add(session);
await _dbContext.SaveChangesAsync();
// Act
await _repository.AddMessageAsync(session.Id, "Message 1", "User", 0);
await _repository.AddMessageAsync(session.Id, "Message 2", "Assistant", 1);
await _repository.AddMessageAsync(session.Id, "Message 3", "User", 2);
// Assert
var messages = await _repository.GetMessagesAsync(session.Id);
messages.Should().HaveCount(3);
messages[0].MessageOrder.Should().Be(0);
messages[1].MessageOrder.Should().Be(1);
messages[2].MessageOrder.Should().Be(2);
}
[Fact]
public async Task CleanupOldSessionsAsync_WithNoOldSessions_ShouldReturnZero()
{
// Arrange
CleanupDatabase();
var recentSession = TestDataBuilder.Mocks.CreateChatSessionEntity(1, 12345);
recentSession.LastUpdatedAt = DateTime.UtcNow.AddMinutes(-10);
_dbContext.ChatSessions.Add(recentSession);
await _dbContext.SaveChangesAsync();
// Act
var removedCount = await _repository.CleanupOldSessionsAsync(24);
// Assert
removedCount.Should().Be(0);
}
}