Fixed some warnings
This commit is contained in:
@@ -14,43 +14,43 @@ namespace Luna.Channels.Tests;
|
||||
[Category("Unit")]
|
||||
public class TelegramChannelTests
|
||||
{
|
||||
private Mock<ITelegramBotClient> _mockBotClient = null!;
|
||||
private Mock<ILogger<TelegramChannel>> _mockLogger = null!;
|
||||
private TelegramOptions _options = null!;
|
||||
private TelegramChannel _channel = null!;
|
||||
private Mock<ITelegramBotClient> mockBotClient = null!;
|
||||
private Mock<ILogger<TelegramChannel>> mockLogger = null!;
|
||||
private TelegramOptions options = null!;
|
||||
private TelegramChannel channel = null!;
|
||||
|
||||
[SetUp]
|
||||
public void SetUp()
|
||||
{
|
||||
_mockBotClient = new Mock<ITelegramBotClient>();
|
||||
_mockLogger = new Mock<ILogger<TelegramChannel>>();
|
||||
_options = new TelegramOptions { BotToken = "test-bot-token:ABCDEF" };
|
||||
_channel = new TelegramChannel("100", _mockBotClient.Object, _mockLogger.Object, _options);
|
||||
mockBotClient = new Mock<ITelegramBotClient>();
|
||||
mockLogger = new Mock<ILogger<TelegramChannel>>();
|
||||
options = new TelegramOptions { BotToken = "test-bot-token:ABCDEF" };
|
||||
channel = new TelegramChannel("100", mockBotClient.Object, mockLogger.Object, options);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
_channel.Dispose();
|
||||
channel.Dispose();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChannelType_Returns_Telegram()
|
||||
{
|
||||
Assert.That(_channel.ChannelType, Is.EqualTo("telegram"));
|
||||
Assert.That(channel.ChannelType, Is.EqualTo("telegram"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChannelId_IsSet_From_Constructor()
|
||||
{
|
||||
Assert.That(_channel.ChannelId, Is.EqualTo("100"));
|
||||
Assert.That(channel.ChannelId, Is.EqualTo("100"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ChannelId_IsUnique_Per_Instance()
|
||||
{
|
||||
var channel1 = new TelegramChannel("111", _mockBotClient.Object, _mockLogger.Object, _options);
|
||||
var channel2 = new TelegramChannel("222", _mockBotClient.Object, _mockLogger.Object, _options);
|
||||
var channel1 = new TelegramChannel("111", mockBotClient.Object, mockLogger.Object, options);
|
||||
var channel2 = new TelegramChannel("222", mockBotClient.Object, mockLogger.Object, options);
|
||||
|
||||
Assert.That(channel1.ChannelId, Is.Not.EqualTo(channel2.ChannelId));
|
||||
|
||||
@@ -61,36 +61,36 @@ public class TelegramChannelTests
|
||||
[Test]
|
||||
public void DisplayName_Contains_Telegram()
|
||||
{
|
||||
Assert.That(_channel.DisplayName, Does.Contain("Telegram"));
|
||||
Assert.That(channel.DisplayName, Does.Contain("Telegram"));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsConnected_Is_True_Initially()
|
||||
{
|
||||
Assert.That(_channel.IsConnected, Is.True);
|
||||
Assert.That(channel.IsConnected, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void IsConnected_Is_False_After_Dispose()
|
||||
{
|
||||
_channel.Dispose();
|
||||
channel.Dispose();
|
||||
|
||||
Assert.That(_channel.IsConnected, Is.False);
|
||||
Assert.That(channel.IsConnected, Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task SendMessageAsync_Calls_BotClient_SendMessage()
|
||||
{
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 1, Chat = new Chat { Id = 100 } });
|
||||
|
||||
var message = new ChannelMessage(
|
||||
Guid.NewGuid().ToString(), "100", "42", "Alice", "Hello!", DateTimeOffset.UtcNow);
|
||||
|
||||
await _channel.SendMessageAsync(message);
|
||||
await channel.SendMessageAsync(message);
|
||||
|
||||
_mockBotClient.Verify(
|
||||
mockBotClient.Verify(
|
||||
c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()),
|
||||
Times.Once);
|
||||
}
|
||||
@@ -98,33 +98,33 @@ public class TelegramChannelTests
|
||||
[Test]
|
||||
public async Task SendMessageAsync_Handles_Network_Error_Without_Crash()
|
||||
{
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ThrowsAsync(new HttpRequestException("Network error"));
|
||||
|
||||
var message = new ChannelMessage(
|
||||
Guid.NewGuid().ToString(), "100", "42", "Alice", "Hello!", DateTimeOffset.UtcNow);
|
||||
|
||||
Assert.DoesNotThrowAsync(async () => await _channel.SendMessageAsync(message));
|
||||
Assert.DoesNotThrowAsync(async () => await channel.SendMessageAsync(message));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void RaiseMessageReceived_Fires_Event_With_Correct_Mapping()
|
||||
{
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
_channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
|
||||
var message = new ChannelMessage(
|
||||
Guid.NewGuid().ToString(), "999", "77", "Bob", "Hello Luna", DateTimeOffset.UtcNow);
|
||||
|
||||
_channel.RaiseMessageReceived(message);
|
||||
channel.RaiseMessageReceived(message);
|
||||
|
||||
Assert.That(captured, Is.Not.Null);
|
||||
Assert.That(captured!.Message.ConversationId, Is.EqualTo("999"));
|
||||
Assert.That(captured.Message.SenderId, Is.EqualTo("77"));
|
||||
Assert.That(captured.Message.SenderName, Is.EqualTo("Bob"));
|
||||
Assert.That(captured.Message.Content, Is.EqualTo("Hello Luna"));
|
||||
Assert.That(captured.Channel, Is.SameAs(_channel));
|
||||
Assert.That(captured.Channel, Is.SameAs(channel));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -133,12 +133,12 @@ public class TelegramChannelTests
|
||||
var sentAt = new DateTimeOffset(2025, 6, 1, 12, 0, 0, TimeSpan.Zero);
|
||||
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
_channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
|
||||
var message = new ChannelMessage(
|
||||
Guid.NewGuid().ToString(), "123", "55", "Carol", "Hi", sentAt);
|
||||
|
||||
_channel.RaiseMessageReceived(message);
|
||||
channel.RaiseMessageReceived(message);
|
||||
|
||||
Assert.That(captured, Is.Not.Null);
|
||||
Assert.That(captured!.Message.SenderName, Is.EqualTo("Carol"));
|
||||
@@ -148,11 +148,11 @@ public class TelegramChannelTests
|
||||
[Test]
|
||||
public async Task SendStreamingMessageAsync_Sends_Initial_Then_Edits_In_Place()
|
||||
{
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 10, Chat = new Chat { Id = 100 } });
|
||||
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<EditMessageTextRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 10, Chat = new Chat { Id = 100 } });
|
||||
|
||||
@@ -163,14 +163,14 @@ public class TelegramChannelTests
|
||||
new(ChatStreamUpdateType.Complete, null, null, true),
|
||||
};
|
||||
|
||||
await _channel.SendStreamingMessageAsync(updates.ToAsyncEnumerable());
|
||||
await channel.SendStreamingMessageAsync(updates.ToAsyncEnumerable());
|
||||
|
||||
// First chunk sends a message, second chunk edits it
|
||||
_mockBotClient.Verify(
|
||||
mockBotClient.Verify(
|
||||
c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()),
|
||||
Times.Once);
|
||||
|
||||
_mockBotClient.Verify(
|
||||
mockBotClient.Verify(
|
||||
c => c.SendRequest(It.IsAny<EditMessageTextRequest>(), It.IsAny<CancellationToken>()),
|
||||
Times.AtLeastOnce);
|
||||
}
|
||||
@@ -185,18 +185,18 @@ public class TelegramChannelTests
|
||||
new(ChatStreamUpdateType.Complete, null, null, true),
|
||||
};
|
||||
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 20, Chat = new Chat { Id = 100 } });
|
||||
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<EditMessageTextRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 20, Chat = new Chat { Id = 100 } });
|
||||
|
||||
await _channel.SendStreamingMessageAsync(updates.ToAsyncEnumerable());
|
||||
await channel.SendStreamingMessageAsync(updates.ToAsyncEnumerable());
|
||||
|
||||
// Content exceeds 4096 — needs at least 2 SendMessage calls (initial + overflow)
|
||||
_mockBotClient.Verify(
|
||||
mockBotClient.Verify(
|
||||
c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()),
|
||||
Times.AtLeast(2));
|
||||
}
|
||||
@@ -204,11 +204,11 @@ public class TelegramChannelTests
|
||||
[Test]
|
||||
public async Task SendStreamingMessageAsync_Handles_IsComplete_True_With_Final_Edit()
|
||||
{
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 30, Chat = new Chat { Id = 100 } });
|
||||
|
||||
_mockBotClient
|
||||
mockBotClient
|
||||
.Setup(c => c.SendRequest(It.IsAny<EditMessageTextRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new Message { Id = 30, Chat = new Chat { Id = 100 } });
|
||||
|
||||
@@ -218,10 +218,10 @@ public class TelegramChannelTests
|
||||
new(ChatStreamUpdateType.Complete, null, null, true),
|
||||
};
|
||||
|
||||
await _channel.SendStreamingMessageAsync(updates.ToAsyncEnumerable());
|
||||
await channel.SendStreamingMessageAsync(updates.ToAsyncEnumerable());
|
||||
|
||||
// Initial message sent
|
||||
_mockBotClient.Verify(
|
||||
mockBotClient.Verify(
|
||||
c => c.SendRequest(It.IsAny<SendMessageRequest>(), It.IsAny<CancellationToken>()),
|
||||
Times.Once);
|
||||
}
|
||||
@@ -235,7 +235,7 @@ public class TelegramChannelTests
|
||||
AllowedUserIds = ["111", "222"]
|
||||
};
|
||||
var restrictedChannel = new TelegramChannel(
|
||||
"500", _mockBotClient.Object, _mockLogger.Object, restrictedOptions);
|
||||
"500", mockBotClient.Object, mockLogger.Object, restrictedOptions);
|
||||
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
restrictedChannel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
@@ -259,7 +259,7 @@ public class TelegramChannelTests
|
||||
AllowedUserIds = ["111", "222"]
|
||||
};
|
||||
var restrictedChannel = new TelegramChannel(
|
||||
"500", _mockBotClient.Object, _mockLogger.Object, restrictedOptions);
|
||||
"500", mockBotClient.Object, mockLogger.Object, restrictedOptions);
|
||||
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
restrictedChannel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
@@ -283,7 +283,7 @@ public class TelegramChannelTests
|
||||
AllowedUserIds = []
|
||||
};
|
||||
var openChannel = new TelegramChannel(
|
||||
"600", _mockBotClient.Object, _mockLogger.Object, openOptions);
|
||||
"600", mockBotClient.Object, mockLogger.Object, openOptions);
|
||||
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
openChannel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
@@ -302,12 +302,12 @@ public class TelegramChannelTests
|
||||
public void Malformed_Message_With_Null_Text_Is_Skipped()
|
||||
{
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
_channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
|
||||
var message = new ChannelMessage(
|
||||
Guid.NewGuid().ToString(), "700", "88", "Ghost", null!, DateTimeOffset.UtcNow);
|
||||
|
||||
_channel.RaiseMessageReceived(message);
|
||||
channel.RaiseMessageReceived(message);
|
||||
|
||||
Assert.That(captured, Is.Null, "Message with null text should be silently skipped");
|
||||
}
|
||||
@@ -316,12 +316,12 @@ public class TelegramChannelTests
|
||||
public void Malformed_Message_With_Empty_Text_Is_Skipped()
|
||||
{
|
||||
ChannelMessageReceivedEventArgs? captured = null;
|
||||
_channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
channel.MessageReceived += (_, args) => { captured = args; return Task.CompletedTask; };
|
||||
|
||||
var message = new ChannelMessage(
|
||||
Guid.NewGuid().ToString(), "700", "88", "Ghost", "", DateTimeOffset.UtcNow);
|
||||
|
||||
_channel.RaiseMessageReceived(message);
|
||||
channel.RaiseMessageReceived(message);
|
||||
|
||||
Assert.That(captured, Is.Null, "Message with empty text should be silently skipped");
|
||||
}
|
||||
@@ -330,16 +330,16 @@ public class TelegramChannelTests
|
||||
public void Dispose_Fires_ConnectionStateChanged()
|
||||
{
|
||||
ChannelConnectionEventArgs? captured = null;
|
||||
_channel.ConnectionStateChanged += (_, args) =>
|
||||
channel.ConnectionStateChanged += (_, args) =>
|
||||
{
|
||||
captured = args;
|
||||
return Task.CompletedTask;
|
||||
};
|
||||
|
||||
_channel.Dispose();
|
||||
channel.Dispose();
|
||||
|
||||
Assert.That(captured, Is.Not.Null);
|
||||
Assert.That(captured!.IsConnected, Is.False);
|
||||
Assert.That(captured.Channel, Is.SameAs(_channel));
|
||||
Assert.That(captured.Channel, Is.SameAs(channel));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user