From a68c9a3c366516645364bff95bb803be93638dc1 Mon Sep 17 00:00:00 2001 From: Niklas Weimann Date: Wed, 8 Nov 2023 23:14:33 +0100 Subject: [PATCH] Refactor UpdateManagerTest and add new observer tests --- src/UnitTests/UpdateManagerTest.cs | 238 +++++++++++++++++++++++++++-- 1 file changed, 224 insertions(+), 14 deletions(-) diff --git a/src/UnitTests/UpdateManagerTest.cs b/src/UnitTests/UpdateManagerTest.cs index 0d0adeb..1495a86 100644 --- a/src/UnitTests/UpdateManagerTest.cs +++ b/src/UnitTests/UpdateManagerTest.cs @@ -7,6 +7,8 @@ using RxTelegram.Bot.Api; using RxTelegram.Bot.Interface.BaseTypes; using RxTelegram.Bot.Interface.BaseTypes.Enums; +using RxTelegram.Bot.Interface.InlineMode; +using RxTelegram.Bot.Interface.Payments; using RxTelegram.Bot.Interface.Setup; namespace RxTelegram.Bot.UnitTests; @@ -16,11 +18,10 @@ public class UpdateManagerTest { private ITelegramBot _telegramBotMock = Substitute.For(); + public static Array GetUpdateTypes() => Enum.GetValues(typeof(UpdateType)); + [SetUp] - public void TestInitialize() - { - _telegramBotMock = Substitute.For(); - } + public void TestInitialize() => _telegramBotMock = Substitute.For(); [Test] public void TestGetUpdateTypes() @@ -94,7 +95,7 @@ public async Task Remove_Should_Remove_Observer_From_Observers_List(UpdateType u public void Given_TelegramBotException_On_RunUpdateSafe_Should_Handle_Exception() { // Arrange - _telegramBotMock.GetUpdate(default, default) + _telegramBotMock.GetUpdate(default) .ThrowsForAnyArgs(new Exception()); // Assert @@ -120,23 +121,19 @@ public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_Observer { // Arrange var observerAll = Substitute.For>(); - var observerMessage = Substitute.For>(); var updateManager = new UpdateManager(_telegramBotMock); var disposableAll = updateManager.Update.Subscribe(observerAll); - var disposableMessage = updateManager.Message.Subscribe(observerMessage); var updates = new[] { new Update { Message = new Message() } }; // Act updateManager.DistributeUpdates(updates); // Assert - observerAll.Received().OnNext(updates.Single()); - observerMessage.Received().OnNext(updates.Single().Message); + observerAll.Received() + .OnNext(updates.Single()); disposableAll.Dispose(); - disposableMessage.Dispose(); } - [Test] [TestCaseSource(nameof(GetUpdateTypes))] public void OnException_WhenCalled_DistributesExceptionToObservers(UpdateType updateType) @@ -163,9 +160,222 @@ public void OnException_WhenCalled_DistributesExceptionToObservers(UpdateType up } // Assert - observer1Mock.Received().OnError(exception); - observer2Mock.Received().OnError(exception); + observer1Mock.Received() + .OnError(exception); + observer2Mock.Received() + .OnError(exception); } - public static Array GetUpdateTypes() => Enum.GetValues(typeof(UpdateType)); + #region UpdateTypes + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_MessageObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.Message.Subscribe(observerAll); + var updates = new[] { new Update { Message = new Message() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .Message); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_EditedMessageObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.EditedMessage.Subscribe(observerAll); + var updates = new[] { new Update { EditedMessage = new Message() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .EditedMessage); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_InlineQueryObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.InlineQuery.Subscribe(observerAll); + var updates = new[] { new Update { InlineQuery = new InlineQuery() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .InlineQuery); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_ChosenInlineResultObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.ChosenInlineResult.Subscribe(observerAll); + var updates = new[] { new Update { ChosenInlineResult = new ChosenInlineResult() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .ChosenInlineResult); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_CallbackQueryObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.CallbackQuery.Subscribe(observerAll); + var updates = new[] { new Update { CallbackQuery = new CallbackQuery() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .CallbackQuery); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_ChannelPostObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.ChannelPost.Subscribe(observerAll); + var updates = new[] { new Update { ChannelPost = new Message() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .ChannelPost); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_EditedChannelPostObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.EditedChannelPost.Subscribe(observerAll); + var updates = new[] { new Update { EditedChannelPost = new Message() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .EditedChannelPost); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_ShippingQueryObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.ShippingQuery.Subscribe(observerAll); + var updates = new[] { new Update { ShippingQuery = new ShippingQuery() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .ShippingQuery); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_PreCheckoutQueryObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.PreCheckoutQuery.Subscribe(observerAll); + var updates = new[] { new Update { PreCheckoutQuery = new PreCheckoutQuery() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .PreCheckoutQuery); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_PollObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.Poll.Subscribe(observerAll); + var updates = new[] { new Update { Poll = new Poll() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .Poll); + disposableAll.Dispose(); + } + + [Test] + public void Given_ValidUpdate_On_DistributeUpdates_Should_PushUpdatesTo_PollAnswerObservers() + { + // Arrange + var observerAll = Substitute.For>(); + var updateManager = new UpdateManager(_telegramBotMock); + var disposableAll = updateManager.PollAnswer.Subscribe(observerAll); + var updates = new[] { new Update { PollAnswer = new PollAnswer() } }; + + // Act + updateManager.DistributeUpdates(updates); + + // Assert + observerAll.Received() + .OnNext(updates.Single() + .PollAnswer); + disposableAll.Dispose(); + } + + #endregion }