pipeline simplifications
This commit is contained in:
parent
4dd071abe2
commit
160ef97626
7 changed files with 76 additions and 165 deletions
|
@ -22,7 +22,6 @@ namespace BirdsiteLive.Pipeline.Processors
|
||||||
public class SendTweetsToFollowersProcessor : ISendTweetsToFollowersProcessor
|
public class SendTweetsToFollowersProcessor : ISendTweetsToFollowersProcessor
|
||||||
{
|
{
|
||||||
private readonly ISendTweetsToInboxTask _sendTweetsToInboxTask;
|
private readonly ISendTweetsToInboxTask _sendTweetsToInboxTask;
|
||||||
private readonly ISaveProgressionTask _saveProgressionTask;
|
|
||||||
private readonly ISendTweetsToSharedInboxTask _sendTweetsToSharedInbox;
|
private readonly ISendTweetsToSharedInboxTask _sendTweetsToSharedInbox;
|
||||||
private readonly IFollowersDal _followersDal;
|
private readonly IFollowersDal _followersDal;
|
||||||
private readonly InstanceSettings _instanceSettings;
|
private readonly InstanceSettings _instanceSettings;
|
||||||
|
@ -31,14 +30,13 @@ namespace BirdsiteLive.Pipeline.Processors
|
||||||
private List<Task> _todo = new List<Task>();
|
private List<Task> _todo = new List<Task>();
|
||||||
|
|
||||||
#region Ctor
|
#region Ctor
|
||||||
public SendTweetsToFollowersProcessor(ISendTweetsToInboxTask sendTweetsToInboxTask, ISendTweetsToSharedInboxTask sendTweetsToSharedInbox, ISaveProgressionTask saveProgressionTask, IFollowersDal followersDal, ILogger<SendTweetsToFollowersProcessor> logger, InstanceSettings instanceSettings, IRemoveFollowerAction removeFollowerAction)
|
public SendTweetsToFollowersProcessor(ISendTweetsToInboxTask sendTweetsToInboxTask, ISendTweetsToSharedInboxTask sendTweetsToSharedInbox, IFollowersDal followersDal, ILogger<SendTweetsToFollowersProcessor> logger, InstanceSettings instanceSettings, IRemoveFollowerAction removeFollowerAction)
|
||||||
{
|
{
|
||||||
_sendTweetsToInboxTask = sendTweetsToInboxTask;
|
_sendTweetsToInboxTask = sendTweetsToInboxTask;
|
||||||
_sendTweetsToSharedInbox = sendTweetsToSharedInbox;
|
_sendTweetsToSharedInbox = sendTweetsToSharedInbox;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_instanceSettings = instanceSettings;
|
_instanceSettings = instanceSettings;
|
||||||
_removeFollowerAction = removeFollowerAction;
|
_removeFollowerAction = removeFollowerAction;
|
||||||
_saveProgressionTask = saveProgressionTask;
|
|
||||||
_followersDal = followersDal;
|
_followersDal = followersDal;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -62,8 +60,6 @@ namespace BirdsiteLive.Pipeline.Processors
|
||||||
.Where(x => string.IsNullOrWhiteSpace(x.SharedInboxRoute))
|
.Where(x => string.IsNullOrWhiteSpace(x.SharedInboxRoute))
|
||||||
.ToList();
|
.ToList();
|
||||||
await ProcessFollowersWithInboxAsync(userWithTweetsToSync.Tweets, followerWtInbox, user);
|
await ProcessFollowersWithInboxAsync(userWithTweetsToSync.Tweets, followerWtInbox, user);
|
||||||
|
|
||||||
await _saveProgressionTask.ProcessAsync(userWithTweetsToSync, ct);
|
|
||||||
});
|
});
|
||||||
_todo.Add(t);
|
_todo.Add(t);
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
{
|
{
|
||||||
_activityPubService = activityPubService;
|
_activityPubService = activityPubService;
|
||||||
_statusService = statusService;
|
_statusService = statusService;
|
||||||
_followersDal = followersDal;
|
|
||||||
_settings = settings;
|
_settings = settings;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
@ -40,46 +39,32 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
public async Task ExecuteAsync(IEnumerable<ExtractedTweet> tweets, Follower follower, SyncTwitterUser user)
|
public async Task ExecuteAsync(IEnumerable<ExtractedTweet> tweets, Follower follower, SyncTwitterUser user)
|
||||||
{
|
{
|
||||||
var userId = user.Id;
|
var userId = user.Id;
|
||||||
var fromStatusId = follower.FollowingsSyncStatus[userId];
|
//var fromStatusId = follower.FollowingsSyncStatus[userId];
|
||||||
var tweetsToSend = tweets
|
var tweetsToSend = tweets
|
||||||
.Where(x => x.Id > fromStatusId)
|
|
||||||
.OrderBy(x => x.Id)
|
.OrderBy(x => x.Id)
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var inbox = follower.InboxRoute;
|
var inbox = follower.InboxRoute;
|
||||||
|
|
||||||
var syncStatus = fromStatusId;
|
foreach (var tweet in tweetsToSend)
|
||||||
try
|
|
||||||
{
|
{
|
||||||
foreach (var tweet in tweetsToSend)
|
try
|
||||||
{
|
{
|
||||||
try
|
var activity = _statusService.GetActivity(user.Acct, tweet);
|
||||||
|
await _activityPubService.PostNewActivity(activity, user.Acct, tweet.Id.ToString(), follower.Host, inbox);
|
||||||
|
}
|
||||||
|
catch (ArgumentException e)
|
||||||
|
{
|
||||||
|
if (e.Message.Contains("Invalid pattern") && e.Message.Contains("at offset")) //Regex exception
|
||||||
{
|
{
|
||||||
var activity = _statusService.GetActivity(user.Acct, tweet);
|
_logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id);
|
||||||
await _activityPubService.PostNewActivity(activity, user.Acct, tweet.Id.ToString(), follower.Host, inbox);
|
|
||||||
}
|
}
|
||||||
catch (ArgumentException e)
|
else
|
||||||
{
|
{
|
||||||
if (e.Message.Contains("Invalid pattern") && e.Message.Contains("at offset")) //Regex exception
|
throw;
|
||||||
{
|
|
||||||
_logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
syncStatus = tweet.Id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (syncStatus != fromStatusId)
|
|
||||||
{
|
|
||||||
follower.FollowingsSyncStatus[userId] = syncStatus;
|
|
||||||
await _followersDal.UpdateFollowerAsync(follower);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,50 +40,30 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
var userId = user.Id;
|
var userId = user.Id;
|
||||||
var inbox = followersPerInstance.First().SharedInboxRoute;
|
var inbox = followersPerInstance.First().SharedInboxRoute;
|
||||||
|
|
||||||
var fromStatusId = followersPerInstance
|
|
||||||
.Max(x => x.FollowingsSyncStatus[userId]);
|
|
||||||
|
|
||||||
var tweetsToSend = tweets
|
var tweetsToSend = tweets
|
||||||
.Where(x => x.Id > fromStatusId)
|
|
||||||
.OrderBy(x => x.Id)
|
.OrderBy(x => x.Id)
|
||||||
.ToList();
|
.ToList();
|
||||||
_logger.LogInformation("After filtering, there were " + tweetsToSend.Count() + " tweets left to send");
|
_logger.LogInformation("After filtering, there were " + tweetsToSend.Count() + " tweets left to send");
|
||||||
|
|
||||||
var syncStatus = fromStatusId;
|
foreach (var tweet in tweetsToSend)
|
||||||
try
|
|
||||||
{
|
{
|
||||||
foreach (var tweet in tweetsToSend)
|
try
|
||||||
{
|
{
|
||||||
try
|
var activity = _statusService.GetActivity(user.Acct, tweet);
|
||||||
|
await _activityPubService.PostNewActivity(activity, user.Acct, tweet.Id.ToString(), host, inbox);
|
||||||
|
}
|
||||||
|
catch (ArgumentException e)
|
||||||
|
{
|
||||||
|
if (e.Message.Contains("Invalid pattern") && e.Message.Contains("at offset")) //Regex exception
|
||||||
{
|
{
|
||||||
var activity = _statusService.GetActivity(user.Acct, tweet);
|
_logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id);
|
||||||
await _activityPubService.PostNewActivity(activity, user.Acct, tweet.Id.ToString(), host, inbox);
|
|
||||||
}
|
}
|
||||||
catch (ArgumentException e)
|
else
|
||||||
{
|
{
|
||||||
if (e.Message.Contains("Invalid pattern") && e.Message.Contains("at offset")) //Regex exception
|
throw;
|
||||||
{
|
|
||||||
_logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
syncStatus = tweet.Id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
if (syncStatus != fromStatusId)
|
|
||||||
{
|
|
||||||
foreach (var f in followersPerInstance)
|
|
||||||
{
|
|
||||||
f.FollowingsSyncStatus[userId] = syncStatus;
|
|
||||||
await _followersDal.UpdateFollowerAsync(f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,7 @@ namespace BirdsiteLive.Twitter
|
||||||
private readonly ITwitterTweetsService _twitterService;
|
private readonly ITwitterTweetsService _twitterService;
|
||||||
|
|
||||||
private readonly MemoryCache _tweetCache;
|
private readonly MemoryCache _tweetCache;
|
||||||
private readonly MemoryCacheEntryOptions _cacheEntryOptions = new MemoryCacheEntryOptions()
|
private readonly MemoryCacheEntryOptions _cacheEntryOptions;
|
||||||
//Priority on removing when reaching size limit (memory pressure)
|
|
||||||
.SetPriority(CacheItemPriority.Low)
|
|
||||||
// Keep in cache for this time, reset time if accessed.
|
|
||||||
.SetSlidingExpiration(TimeSpan.FromMinutes(60))
|
|
||||||
// Remove from cache after this time, regardless of sliding expiration
|
|
||||||
.SetAbsoluteExpiration(TimeSpan.FromDays(1));
|
|
||||||
|
|
||||||
#region Ctor
|
#region Ctor
|
||||||
public CachedTwitterTweetsService(ITwitterTweetsService twitterService, InstanceSettings settings)
|
public CachedTwitterTweetsService(ITwitterTweetsService twitterService, InstanceSettings settings)
|
||||||
|
@ -32,8 +26,16 @@ namespace BirdsiteLive.Twitter
|
||||||
|
|
||||||
_tweetCache = new MemoryCache(new MemoryCacheOptions()
|
_tweetCache = new MemoryCache(new MemoryCacheOptions()
|
||||||
{
|
{
|
||||||
SizeLimit = settings.TweetCacheCapacity,
|
SizeLimit = settings.TweetCacheCapacity,
|
||||||
});
|
});
|
||||||
|
_cacheEntryOptions = new MemoryCacheEntryOptions()
|
||||||
|
.SetSize(1)
|
||||||
|
//Priority on removing when reaching size limit (memory pressure)
|
||||||
|
.SetPriority(CacheItemPriority.Low)
|
||||||
|
// Keep in cache for this time, reset time if accessed.
|
||||||
|
.SetSlidingExpiration(TimeSpan.FromMinutes(60))
|
||||||
|
// Remove from cache after this time, regardless of sliding expiration
|
||||||
|
.SetAbsoluteExpiration(TimeSpan.FromDays(1));
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -169,7 +169,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -260,7 +260,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -352,7 +352,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -449,7 +449,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -529,7 +529,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -610,7 +610,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -699,7 +699,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -789,7 +789,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -879,7 +879,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -969,7 +969,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
@ -1064,7 +1064,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
var removeFollowerMock = new Mock<IRemoveFollowerAction>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, saveProgressMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object, settings, removeFollowerMock.Object);
|
||||||
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
|
|
|
@ -85,10 +85,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(activity);
|
.Returns(activity);
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -168,10 +164,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(activity);
|
.Returns(activity);
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -254,10 +246,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(activity);
|
.Returns(activity);
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -340,10 +329,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(activity);
|
.Returns(activity);
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -400,7 +386,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
#region Mocks
|
#region Mocks
|
||||||
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
||||||
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 })
|
||||||
{
|
{
|
||||||
activityPubService
|
activityPubService
|
||||||
.Setup(x => x.PostNewActivity(
|
.Setup(x => x.PostNewActivity(
|
||||||
|
@ -413,7 +399,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
||||||
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 })
|
||||||
{
|
{
|
||||||
statusServiceMock
|
statusServiceMock
|
||||||
.Setup(x => x.GetActivity(
|
.Setup(x => x.GetActivity(
|
||||||
|
@ -423,10 +409,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId3)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -485,6 +468,15 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
#region Mocks
|
#region Mocks
|
||||||
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
activityPubService
|
||||||
|
.Setup(x => x.PostNewActivity(
|
||||||
|
It.Is<ActivityCreateNote>(y => y.apObject.id == tweetId1.ToString()),
|
||||||
|
It.Is<string>(y => y == twitterHandle),
|
||||||
|
It.Is<string>(y => y == tweetId1.ToString()),
|
||||||
|
It.Is<string>(y => y == host),
|
||||||
|
It.Is<string>(y => y == inbox)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
activityPubService
|
activityPubService
|
||||||
.Setup(x => x.PostNewActivity(
|
.Setup(x => x.PostNewActivity(
|
||||||
It.Is<ActivityCreateNote>(y => y.apObject.id == tweetId2.ToString()),
|
It.Is<ActivityCreateNote>(y => y.apObject.id == tweetId2.ToString()),
|
||||||
|
@ -504,7 +496,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Throws(new HttpRequestException());
|
.Throws(new HttpRequestException());
|
||||||
|
|
||||||
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
||||||
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 })
|
||||||
{
|
{
|
||||||
statusServiceMock
|
statusServiceMock
|
||||||
.Setup(x => x.GetActivity(
|
.Setup(x => x.GetActivity(
|
||||||
|
@ -514,10 +506,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId2)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -592,10 +580,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Throws(new ArgumentException("Invalid pattern blabla at offset 9"));
|
.Throws(new ArgumentException("Invalid pattern blabla at offset 9"));
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -105,13 +105,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
|
||||||
{
|
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -212,14 +205,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
|
||||||
{
|
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -318,13 +303,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
|
||||||
{
|
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -398,7 +376,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
#region Mocks
|
#region Mocks
|
||||||
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
||||||
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 })
|
||||||
{
|
{
|
||||||
activityPubService
|
activityPubService
|
||||||
.Setup(x => x.PostNewActivity(
|
.Setup(x => x.PostNewActivity(
|
||||||
|
@ -411,7 +389,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
||||||
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 })
|
||||||
{
|
{
|
||||||
statusServiceMock
|
statusServiceMock
|
||||||
.Setup(x => x.GetActivity(
|
.Setup(x => x.GetActivity(
|
||||||
|
@ -422,14 +400,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
|
||||||
{
|
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId3)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -504,6 +474,15 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
#region Mocks
|
#region Mocks
|
||||||
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
var activityPubService = new Mock<IActivityPubService>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
activityPubService
|
||||||
|
.Setup(x => x.PostNewActivity(
|
||||||
|
It.Is<ActivityCreateNote>(y => y.apObject.id == tweetId1.ToString()),
|
||||||
|
It.Is<string>(y => y == twitterHandle),
|
||||||
|
It.Is<string>(y => y == tweetId1.ToString()),
|
||||||
|
It.Is<string>(y => y == host),
|
||||||
|
It.Is<string>(y => y == inbox)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
activityPubService
|
activityPubService
|
||||||
.Setup(x => x.PostNewActivity(
|
.Setup(x => x.PostNewActivity(
|
||||||
It.Is<ActivityCreateNote>(y => y.apObject.id == tweetId2.ToString()),
|
It.Is<ActivityCreateNote>(y => y.apObject.id == tweetId2.ToString()),
|
||||||
|
@ -523,7 +502,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Throws(new HttpRequestException());
|
.Throws(new HttpRequestException());
|
||||||
|
|
||||||
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
var statusServiceMock = new Mock<IStatusService>(MockBehavior.Strict);
|
||||||
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 })
|
||||||
{
|
{
|
||||||
statusServiceMock
|
statusServiceMock
|
||||||
.Setup(x => x.GetActivity(
|
.Setup(x => x.GetActivity(
|
||||||
|
@ -534,14 +513,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
|
||||||
{
|
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId2)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -633,14 +604,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
|
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
foreach (var follower in followers)
|
|
||||||
{
|
|
||||||
followersDalMock
|
|
||||||
.Setup(x => x.UpdateFollowerAsync(
|
|
||||||
It.Is<Follower>(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId)))
|
|
||||||
.Returns(Task.CompletedTask);
|
|
||||||
}
|
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue