diff --git a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/RetrieveTweetsToDeleteProcessorTests.cs b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/RetrieveTweetsToDeleteProcessorTests.cs index b9f66d5..7d7f7d1 100644 --- a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/RetrieveTweetsToDeleteProcessorTests.cs +++ b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/RetrieveTweetsToDeleteProcessorTests.cs @@ -72,5 +72,60 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.TweetsCleanUp } #endregion } + + [TestMethod] + public async Task Process_Pagination_Test() + { + #region Stubs + var settings = new InstanceSettings { }; + var bufferBlock = new BufferBlock(); + + + var batch = new List(); + var batch2 = new List(); + + for (var i = 0; i < 100; i++) + { + var tweet = new SyncTweet + { + Id = i + }; + batch.Add(tweet); + } + + for (var i = 100; i < 120; i++) + { + var tweet = new SyncTweet + { + Id = i + }; + batch2.Add(tweet); + } + + #endregion + + #region Mocks + var dalMock = new Mock(MockBehavior.Strict); + dalMock + .Setup(x => x.GetTweetsOlderThanAsync(It.IsAny(), It.Is(y => y == -1), It.Is(y => y == 100))) + .ReturnsAsync(batch); + + dalMock + .Setup(x => x.GetTweetsOlderThanAsync(It.IsAny(), It.Is(y => y == 99), It.Is(y => y == 100))) + .ReturnsAsync(batch2); + #endregion + + var processor = new RetrieveTweetsToDeleteProcessor(dalMock.Object, settings); + processor.GetTweetsAsync(bufferBlock, CancellationToken.None); + + await Task.Delay(TimeSpan.FromSeconds(1)); + + #region Validations + dalMock.VerifyAll(); + + Assert.AreEqual(batch.Count + batch2.Count, bufferBlock.Count); + #endregion + } + } } \ No newline at end of file diff --git a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/SaveDeletedTweetStatusProcessorTests.cs b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/SaveDeletedTweetStatusProcessorTests.cs index 10d21c7..ea002cb 100644 --- a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/SaveDeletedTweetStatusProcessorTests.cs +++ b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/TweetsCleanUp/SaveDeletedTweetStatusProcessorTests.cs @@ -1,6 +1,80 @@ -namespace BirdsiteLive.Pipeline.Tests.Processors.TweetsCleanUp; +using System; +using System.Threading; +using System.Threading.Tasks; +using BirdsiteLive.Common.Settings; +using BirdsiteLive.DAL.Contracts; +using BirdsiteLive.DAL.Models; +using BirdsiteLive.Pipeline.Models; +using BirdsiteLive.Pipeline.Processors.TweetsCleanUp; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; -public class SaveDeletedTweetStatusProcessorTests +namespace BirdsiteLive.Pipeline.Tests.Processors.TweetsCleanUp { - + [TestClass] + public class SaveDeletedTweetStatusProcessorTests + { + [TestMethod] + public async Task Process_DeleteSuccessfull_Test() + { + #region Stubs + var settings = new InstanceSettings { }; + var tweetId = 42; + var tweetToDelete = new TweetToDelete + { + DeleteSuccessful = true, + Tweet = new SyncTweet + { + Id = tweetId + } + }; + #endregion + + #region Mocks + var dalMock = new Mock(MockBehavior.Strict); + dalMock + .Setup(x => x.DeleteTweetAsync(It.Is(y => y == tweetId))) + .Returns(Task.CompletedTask); + #endregion + + var processor = new SaveDeletedTweetStatusProcessor(dalMock.Object, settings); + await processor.ProcessAsync(tweetToDelete, CancellationToken.None); + + #region Validations + dalMock.VerifyAll(); + #endregion + } + + [TestMethod] + public async Task Process_Expired_Test() + { + #region Stubs + var settings = new InstanceSettings { }; + var tweetId = 42; + var tweetToDelete = new TweetToDelete + { + DeleteSuccessful = false, + Tweet = new SyncTweet + { + Id = tweetId, + PublishedAt = DateTime.UtcNow.AddDays(-30) + } + }; + #endregion + + #region Mocks + var dalMock = new Mock(MockBehavior.Strict); + dalMock + .Setup(x => x.DeleteTweetAsync(It.Is(y => y == tweetId))) + .Returns(Task.CompletedTask); + #endregion + + var processor = new SaveDeletedTweetStatusProcessor(dalMock.Object, settings); + await processor.ProcessAsync(tweetToDelete, CancellationToken.None); + + #region Validations + dalMock.VerifyAll(); + #endregion + } + } } \ No newline at end of file diff --git a/src/Tests/BirdsiteLive.Pipeline.Tests/TweetCleanUpPipelineTests.cs b/src/Tests/BirdsiteLive.Pipeline.Tests/TweetCleanUpPipelineTests.cs index eaaef54..a7f2751 100644 --- a/src/Tests/BirdsiteLive.Pipeline.Tests/TweetCleanUpPipelineTests.cs +++ b/src/Tests/BirdsiteLive.Pipeline.Tests/TweetCleanUpPipelineTests.cs @@ -1,6 +1,48 @@ -namespace BirdsiteLive.Pipeline.Tests; +using System.Threading; +using System.Threading.Tasks; +using System.Threading.Tasks.Dataflow; +using BirdsiteLive.DAL.Models; +using BirdsiteLive.Pipeline.Contracts.Federation; +using BirdsiteLive.Pipeline.Contracts.TweetsCleanUp; +using BirdsiteLive.Pipeline.Models; +using Microsoft.Extensions.Logging; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Moq; -public class TweetCleanUpPipelineTests +namespace BirdsiteLive.Pipeline.Tests { - + [TestClass] + public class TweetCleanUpPipelineTests + { + [TestMethod] + public async Task Process() + { + #region Stubs + var ct = new CancellationTokenSource(10); + #endregion + + #region Mocks + var retrieveTweetsToDeleteProcessor = new Mock(MockBehavior.Strict); + retrieveTweetsToDeleteProcessor + .Setup(x => x.GetTweetsAsync( + It.IsAny>(), + It.IsAny())) + .Returns(Task.Delay(0)); + + var deleteTweetsProcessor = new Mock(MockBehavior.Strict); + var saveDeletedTweetStatusProcessor = new Mock(MockBehavior.Strict); + var logger = new Mock>(); + + #endregion + + var pipeline = new TweetCleanUpPipeline(retrieveTweetsToDeleteProcessor.Object, deleteTweetsProcessor.Object, saveDeletedTweetStatusProcessor.Object, logger.Object); + await pipeline.ExecuteAsync(ct.Token); + + #region Validations + retrieveTweetsToDeleteProcessor.VerifyAll(); + deleteTweetsProcessor.VerifyAll(); + saveDeletedTweetStatusProcessor.VerifyAll(); + #endregion + } + } } \ No newline at end of file