added tests

This commit is contained in:
Nicolas Constant 2023-03-13 23:50:05 -04:00
parent 8a99f5ecce
commit 5b93c2b760
No known key found for this signature in database
GPG Key ID: 1E9F677FB01A5688
3 changed files with 177 additions and 6 deletions

View File

@ -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<TweetToDelete>();
var batch = new List<SyncTweet>();
var batch2 = new List<SyncTweet>();
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<ISyncTweetsPostgresDal>(MockBehavior.Strict);
dalMock
.Setup(x => x.GetTweetsOlderThanAsync(It.IsAny<DateTime>(), It.Is<long>(y => y == -1), It.Is<int>(y => y == 100)))
.ReturnsAsync(batch);
dalMock
.Setup(x => x.GetTweetsOlderThanAsync(It.IsAny<DateTime>(), It.Is<long>(y => y == 99), It.Is<int>(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
}
}
}

View File

@ -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<ISyncTweetsPostgresDal>(MockBehavior.Strict);
dalMock
.Setup(x => x.DeleteTweetAsync(It.Is<long>(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<ISyncTweetsPostgresDal>(MockBehavior.Strict);
dalMock
.Setup(x => x.DeleteTweetAsync(It.Is<long>(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
}
}
}

View File

@ -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<IRetrieveTweetsToDeleteProcessor>(MockBehavior.Strict);
retrieveTweetsToDeleteProcessor
.Setup(x => x.GetTweetsAsync(
It.IsAny<BufferBlock<TweetToDelete>>(),
It.IsAny<CancellationToken>()))
.Returns(Task.Delay(0));
var deleteTweetsProcessor = new Mock<IDeleteTweetsProcessor>(MockBehavior.Strict);
var saveDeletedTweetStatusProcessor = new Mock<ISaveDeletedTweetStatusProcessor>(MockBehavior.Strict);
var logger = new Mock<ILogger<TweetCleanUpPipeline>>();
#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
}
}
}