|
| 1 | +using CubicBot.Telegram.Utils; |
| 2 | +using Telegram.Bot.Exceptions; |
| 3 | +using Xunit; |
| 4 | + |
| 5 | +namespace CubicBot.Telegram.Tests; |
| 6 | + |
| 7 | +public class ChatHelperTests |
| 8 | +{ |
| 9 | + [Fact] |
| 10 | + public void Get_Retry_Wait_Time_Normal() |
| 11 | + { |
| 12 | + for (var i = 1; i <= 30; i++) |
| 13 | + { |
| 14 | + Test_Get_Retry_Wait_Time(i); |
| 15 | + } |
| 16 | + } |
| 17 | + |
| 18 | + private static void Test_Get_Retry_Wait_Time(int seconds) |
| 19 | + { |
| 20 | + var ex = new ApiRequestException($"Too Many Requests: retry after {seconds}", 429); |
| 21 | + |
| 22 | + var waitTimeSec = ChatHelper.GetRetryWaitTimeMs(ex) / 1000; |
| 23 | + |
| 24 | + Assert.InRange(waitTimeSec, seconds + 1, seconds + 5); |
| 25 | + } |
| 26 | + |
| 27 | + [Theory] |
| 28 | + [InlineData("💩")] |
| 29 | + [InlineData("Super super super super super super super long error message.")] |
| 30 | + public void Get_Retry_Wait_Time_Bad_Message(string message) |
| 31 | + { |
| 32 | + var ex = new ApiRequestException(message, 429); |
| 33 | + |
| 34 | + var waitTimeMs = ChatHelper.GetRetryWaitTimeMs(ex); |
| 35 | + |
| 36 | + Assert.Equal(15 * 1000, waitTimeMs); |
| 37 | + } |
| 38 | + |
| 39 | + [Theory] |
| 40 | + [InlineData(null, "fakename", null, null)] |
| 41 | + [InlineData("lol", "fakename", null, null)] |
| 42 | + [InlineData("/", "fakename", null, null)] |
| 43 | + [InlineData("/ arg", "fakename", null, null)] |
| 44 | + [InlineData("/@", "fakename", null, null)] |
| 45 | + [InlineData("/@ arg", "fakename", null, null)] |
| 46 | + [InlineData("/@fakename", "fakename", null, null)] |
| 47 | + [InlineData("/@fakename arg", "fakename", null, null)] |
| 48 | + [InlineData("/@wrongname", "fakename", null, null)] |
| 49 | + [InlineData("/start", "fakename", "start", null)] |
| 50 | + [InlineData("/start ", "fakename", "start", null)] |
| 51 | + [InlineData("/start ", "fakename", "start", null)] |
| 52 | + [InlineData("/start arg", "fakename", "start", "arg")] |
| 53 | + [InlineData("/start arg ", "fakename", "start", "arg")] |
| 54 | + [InlineData("/start arg", "fakename", "start", "arg")] |
| 55 | + [InlineData("/start@ arg", "fakename", "start", "arg")] |
| 56 | + [InlineData("/start@wrongname arg", "fakename", null, null)] |
| 57 | + [InlineData("/start@fakename arg", "fakename", "start", "arg")] |
| 58 | + public void Parse_Message_Into_Command_And_Argument(string? message, string botUsername, string? expectedCommand, string? expectedArgument) |
| 59 | + { |
| 60 | + var (command, argument) = ChatHelper.ParseMessageIntoCommandAndArgument(message, botUsername); |
| 61 | + |
| 62 | + Assert.Equal(expectedCommand, command); |
| 63 | + Assert.Equal(expectedArgument, argument); |
| 64 | + } |
| 65 | +} |
0 commit comments