Add tests #3

Merged
mrleo1nid merged 2 commits from dev into master 2025-10-22 02:23:16 +00:00
Showing only changes of commit 594e4a1782 - Show all commits

View File

@@ -1,8 +1,10 @@
using ChatBot.Models; using ChatBot.Models;
using ChatBot.Models.Dto;
using ChatBot.Services.Interfaces; using ChatBot.Services.Interfaces;
using FluentAssertions; using FluentAssertions;
using Moq; using Moq;
using OllamaSharp.Models.Chat; using OllamaSharp.Models.Chat;
using System.Collections.Concurrent;
namespace ChatBot.Tests.Models; namespace ChatBot.Tests.Models;
@@ -17,15 +19,17 @@ public class ChatSessionCompressionTests
session.SetCompressionService(compressionServiceMock.Object); session.SetCompressionService(compressionServiceMock.Object);
// Setup compression service to return compressed messages // Setup compression service to return compressed messages
compressionServiceMock var compressedMessages = new List<ChatMessage>
.Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>()))
.ReturnsAsync(
new List<ChatMessage>
{ {
new() { Role = ChatRole.System, Content = "System prompt" }, new ChatMessage { Role = ChatRole.System.ToString(), Content = "System prompt" },
new() { Role = ChatRole.User, Content = "Compressed user message" }, new ChatMessage { Role = ChatRole.User.ToString(), Content = "Compressed user message" }
} };
); compressionServiceMock
.Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(compressedMessages);
compressionServiceMock
.Setup(x => x.ShouldCompress(It.IsAny<int>(), It.IsAny<int>()))
.Returns(true);
// Add messages to session // Add messages to session
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
@@ -57,9 +61,13 @@ public class ChatSessionCompressionTests
session.SetCompressionService(compressionServiceMock.Object); session.SetCompressionService(compressionServiceMock.Object);
// Setup compression service to throw an exception // Setup compression service to throw an exception
var exception = new Exception("Compression failed");
compressionServiceMock compressionServiceMock
.Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>())) .Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
.ThrowsAsync(new Exception("Compression failed")); .ThrowsAsync(exception);
compressionServiceMock
.Setup(x => x.ShouldCompress(It.IsAny<int>(), It.IsAny<int>()))
.Returns(true);
// Add messages to session // Add messages to session
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
@@ -87,6 +95,11 @@ public class ChatSessionCompressionTests
var compressionServiceMock = new Mock<IHistoryCompressionService>(); var compressionServiceMock = new Mock<IHistoryCompressionService>();
session.SetCompressionService(compressionServiceMock.Object); session.SetCompressionService(compressionServiceMock.Object);
// Setup compression service to return false for ShouldCompress when count is below threshold
compressionServiceMock
.Setup(x => x.ShouldCompress(It.Is<int>(c => c < 5), It.Is<int>(t => t == 5)))
.Returns(false);
// Add messages to session (below threshold) // Add messages to session (below threshold)
session.AddMessage(new ChatMessage { Role = ChatRole.User, Content = "Message 1" }); session.AddMessage(new ChatMessage { Role = ChatRole.User, Content = "Message 1" });
session.AddMessage(new ChatMessage { Role = ChatRole.Assistant, Content = "Response 1" }); session.AddMessage(new ChatMessage { Role = ChatRole.Assistant, Content = "Response 1" });
@@ -100,7 +113,7 @@ public class ChatSessionCompressionTests
// Assert - Should not call compression service // Assert - Should not call compression service
compressionServiceMock.Verify( compressionServiceMock.Verify(
x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>()), x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>(), It.IsAny<CancellationToken>()),
Times.Never Times.Never
); );
@@ -116,17 +129,21 @@ public class ChatSessionCompressionTests
var compressionServiceMock = new Mock<IHistoryCompressionService>(); var compressionServiceMock = new Mock<IHistoryCompressionService>();
session.SetCompressionService(compressionServiceMock.Object); session.SetCompressionService(compressionServiceMock.Object);
// Setup compression service to delay to simulate processing time // Setup compression service to simulate processing time
compressionServiceMock var delayedResult = new List<ChatMessage>
.Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>()))
.ReturnsAsync(
(List<ChatMessage> messages, int target) =>
Task.Delay(50)
.ContinueWith(_ => new List<ChatMessage>
{ {
new() { Role = ChatRole.System, Content = "Compressed" }, new ChatMessage { Role = ChatRole.System.ToString(), Content = "Compressed" }
}) };
); compressionServiceMock
.Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
.Returns(async (List<ChatMessage> messages, int target, CancellationToken ct) =>
{
await Task.Delay(50);
return delayedResult;
});
compressionServiceMock
.Setup(x => x.ShouldCompress(It.IsAny<int>(), It.IsAny<int>()))
.Returns(true);
var tasks = new List<Task>(); var tasks = new List<Task>();
int messageCount = 5; int messageCount = 5;
@@ -176,11 +193,10 @@ public class ChatSessionCompressionTests
// Setup compression service to preserve system message // Setup compression service to preserve system message
compressionServiceMock compressionServiceMock
.Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>())) .Setup(x => x.CompressHistoryAsync(It.IsAny<List<ChatMessage>>(), It.IsAny<int>(), It.IsAny<CancellationToken>()))
.ReturnsAsync( .Returns((List<ChatMessage> messages, int target, CancellationToken ct) =>
(List<ChatMessage> messages, int target) =>
{ {
var systemMessage = messages.FirstOrDefault(m => m.Role == ChatRole.System); var systemMessage = messages.FirstOrDefault(m => m.Role == ChatRole.System.ToString());
var compressed = new List<ChatMessage>(); var compressed = new List<ChatMessage>();
if (systemMessage != null) if (systemMessage != null)
@@ -188,17 +204,17 @@ public class ChatSessionCompressionTests
compressed.Add(systemMessage); compressed.Add(systemMessage);
} }
compressed.Add( compressed.Add(new ChatMessage
new ChatMessage
{ {
Role = ChatRole.User, Role = ChatRole.User.ToString(),
Content = "Compressed user messages", Content = "Compressed user messages"
} });
);
return compressed; return Task.FromResult(compressed);
} });
); compressionServiceMock
.Setup(x => x.ShouldCompress(It.IsAny<int>(), It.IsAny<int>()))
.Returns(true);
// Add system message and some user messages // Add system message and some user messages
session.AddMessage(new ChatMessage { Role = ChatRole.System, Content = "System prompt" }); session.AddMessage(new ChatMessage { Role = ChatRole.System, Content = "System prompt" });