diff --git a/src/BirdsiteLive.Pipeline/Processors/SendTweetsToFollowersProcessor.cs b/src/BirdsiteLive.Pipeline/Processors/SendTweetsToFollowersProcessor.cs index 796e472..c04a8cd 100644 --- a/src/BirdsiteLive.Pipeline/Processors/SendTweetsToFollowersProcessor.cs +++ b/src/BirdsiteLive.Pipeline/Processors/SendTweetsToFollowersProcessor.cs @@ -22,7 +22,6 @@ namespace BirdsiteLive.Pipeline.Processors public class SendTweetsToFollowersProcessor : ISendTweetsToFollowersProcessor { private readonly ISendTweetsToInboxTask _sendTweetsToInboxTask; - private readonly ISaveProgressionTask _saveProgressionTask; private readonly ISendTweetsToSharedInboxTask _sendTweetsToSharedInbox; private readonly IFollowersDal _followersDal; private readonly InstanceSettings _instanceSettings; @@ -31,14 +30,13 @@ namespace BirdsiteLive.Pipeline.Processors private List _todo = new List(); #region Ctor - public SendTweetsToFollowersProcessor(ISendTweetsToInboxTask sendTweetsToInboxTask, ISendTweetsToSharedInboxTask sendTweetsToSharedInbox, ISaveProgressionTask saveProgressionTask, IFollowersDal followersDal, ILogger logger, InstanceSettings instanceSettings, IRemoveFollowerAction removeFollowerAction) + public SendTweetsToFollowersProcessor(ISendTweetsToInboxTask sendTweetsToInboxTask, ISendTweetsToSharedInboxTask sendTweetsToSharedInbox, IFollowersDal followersDal, ILogger logger, InstanceSettings instanceSettings, IRemoveFollowerAction removeFollowerAction) { _sendTweetsToInboxTask = sendTweetsToInboxTask; _sendTweetsToSharedInbox = sendTweetsToSharedInbox; _logger = logger; _instanceSettings = instanceSettings; _removeFollowerAction = removeFollowerAction; - _saveProgressionTask = saveProgressionTask; _followersDal = followersDal; } #endregion @@ -62,8 +60,6 @@ namespace BirdsiteLive.Pipeline.Processors .Where(x => string.IsNullOrWhiteSpace(x.SharedInboxRoute)) .ToList(); await ProcessFollowersWithInboxAsync(userWithTweetsToSync.Tweets, followerWtInbox, user); - - await _saveProgressionTask.ProcessAsync(userWithTweetsToSync, ct); }); _todo.Add(t); diff --git a/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToInboxTask.cs b/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToInboxTask.cs index ec98bd8..7b0c533 100644 --- a/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToInboxTask.cs +++ b/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToInboxTask.cs @@ -31,7 +31,6 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks { _activityPubService = activityPubService; _statusService = statusService; - _followersDal = followersDal; _settings = settings; _logger = logger; } @@ -40,46 +39,32 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks public async Task ExecuteAsync(IEnumerable tweets, Follower follower, SyncTwitterUser user) { var userId = user.Id; - var fromStatusId = follower.FollowingsSyncStatus[userId]; + //var fromStatusId = follower.FollowingsSyncStatus[userId]; var tweetsToSend = tweets - .Where(x => x.Id > fromStatusId) .OrderBy(x => x.Id) .ToList(); var inbox = follower.InboxRoute; - var syncStatus = fromStatusId; - try + foreach (var tweet in tweetsToSend) { - 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); - await _activityPubService.PostNewActivity(activity, user.Acct, tweet.Id.ToString(), follower.Host, inbox); + _logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id); } - catch (ArgumentException e) + else { - if (e.Message.Contains("Invalid pattern") && e.Message.Contains("at offset")) //Regex exception - { - _logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id); - } - else - { - throw; - } + throw; } + } - syncStatus = tweet.Id; - } - } - finally - { - if (syncStatus != fromStatusId) - { - follower.FollowingsSyncStatus[userId] = syncStatus; - await _followersDal.UpdateFollowerAsync(follower); - } } } } diff --git a/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToSharedInboxTask.cs b/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToSharedInboxTask.cs index 72a7c41..f66eeab 100644 --- a/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToSharedInboxTask.cs +++ b/src/BirdsiteLive.Pipeline/Processors/SubTasks/SendTweetsToSharedInboxTask.cs @@ -40,50 +40,30 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks var userId = user.Id; var inbox = followersPerInstance.First().SharedInboxRoute; - var fromStatusId = followersPerInstance - .Max(x => x.FollowingsSyncStatus[userId]); - var tweetsToSend = tweets - .Where(x => x.Id > fromStatusId) .OrderBy(x => x.Id) .ToList(); _logger.LogInformation("After filtering, there were " + tweetsToSend.Count() + " tweets left to send"); - var syncStatus = fromStatusId; - try + foreach (var tweet in tweetsToSend) { - 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); - await _activityPubService.PostNewActivity(activity, user.Acct, tweet.Id.ToString(), host, inbox); + _logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id); } - catch (ArgumentException e) + else { - if (e.Message.Contains("Invalid pattern") && e.Message.Contains("at offset")) //Regex exception - { - _logger.LogError(e, "Can't parse {MessageContent} from Tweet {Id}", tweet.MessageContent, tweet.Id); - } - else - { - throw; - } + throw; } + } - syncStatus = tweet.Id; - } - } - finally - { - if (syncStatus != fromStatusId) - { - foreach (var f in followersPerInstance) - { - f.FollowingsSyncStatus[userId] = syncStatus; - await _followersDal.UpdateFollowerAsync(f); - } - } } } } diff --git a/src/BirdsiteLive.Twitter/CachedTwitterTweetsService.cs b/src/BirdsiteLive.Twitter/CachedTwitterTweetsService.cs index 4752a19..a2a85fc 100644 --- a/src/BirdsiteLive.Twitter/CachedTwitterTweetsService.cs +++ b/src/BirdsiteLive.Twitter/CachedTwitterTweetsService.cs @@ -17,13 +17,7 @@ namespace BirdsiteLive.Twitter private readonly ITwitterTweetsService _twitterService; private readonly MemoryCache _tweetCache; - private readonly MemoryCacheEntryOptions _cacheEntryOptions = new MemoryCacheEntryOptions() - //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)); + private readonly MemoryCacheEntryOptions _cacheEntryOptions; #region Ctor public CachedTwitterTweetsService(ITwitterTweetsService twitterService, InstanceSettings settings) @@ -32,8 +26,16 @@ namespace BirdsiteLive.Twitter _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 diff --git a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SendTweetsToFollowersProcessorTests.cs b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SendTweetsToFollowersProcessorTests.cs index 03e90ad..06d8b67 100644 --- a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SendTweetsToFollowersProcessorTests.cs +++ b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SendTweetsToFollowersProcessorTests.cs @@ -87,7 +87,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -169,7 +169,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -260,7 +260,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -352,7 +352,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -449,7 +449,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -529,7 +529,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -610,7 +610,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -699,7 +699,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -789,7 +789,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors .Returns(Task.CompletedTask); #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); #region Validations @@ -879,7 +879,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors .Returns(Task.CompletedTask); #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); #region Validations @@ -969,7 +969,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations @@ -1064,7 +1064,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors var removeFollowerMock = new Mock(MockBehavior.Strict); #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); #region Validations diff --git a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToInboxTaskTests.cs b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToInboxTaskTests.cs index e8a6fbf..da1cfb7 100644 --- a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToInboxTaskTests.cs +++ b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToInboxTaskTests.cs @@ -85,10 +85,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Returns(activity); var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); var loggerMock = new Mock>(); #endregion @@ -168,10 +164,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Returns(activity); var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); var loggerMock = new Mock>(); #endregion @@ -254,10 +246,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Returns(activity); var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); + var loggerMock = new Mock>(); #endregion @@ -340,10 +329,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Returns(activity); var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); + var loggerMock = new Mock>(); #endregion @@ -400,7 +386,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks #region Mocks var activityPubService = new Mock(MockBehavior.Strict); - foreach (var tweetId in new[] { tweetId2, tweetId3 }) + foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 }) { activityPubService .Setup(x => x.PostNewActivity( @@ -413,7 +399,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks } var statusServiceMock = new Mock(MockBehavior.Strict); - foreach (var tweetId in new[] { tweetId2, tweetId3 }) + foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 }) { statusServiceMock .Setup(x => x.GetActivity( @@ -423,10 +409,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks } var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId3))) - .Returns(Task.CompletedTask); + var loggerMock = new Mock>(); #endregion @@ -485,6 +468,15 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks #region Mocks var activityPubService = new Mock(MockBehavior.Strict); + activityPubService + .Setup(x => x.PostNewActivity( + It.Is(y => y.apObject.id == tweetId1.ToString()), + It.Is(y => y == twitterHandle), + It.Is(y => y == tweetId1.ToString()), + It.Is(y => y == host), + It.Is(y => y == inbox))) + .Returns(Task.CompletedTask); + activityPubService .Setup(x => x.PostNewActivity( It.Is(y => y.apObject.id == tweetId2.ToString()), @@ -504,7 +496,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Throws(new HttpRequestException()); var statusServiceMock = new Mock(MockBehavior.Strict); - foreach (var tweetId in new[] { tweetId2, tweetId3 }) + foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 }) { statusServiceMock .Setup(x => x.GetActivity( @@ -514,10 +506,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks } var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId2))) - .Returns(Task.CompletedTask); var loggerMock = new Mock>(); #endregion @@ -592,10 +580,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Throws(new ArgumentException("Invalid pattern blabla at offset 9")); var followersDalMock = new Mock(MockBehavior.Strict); - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); + var loggerMock = new Mock>(); #endregion diff --git a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToSharedInboxTests.cs b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToSharedInboxTests.cs index ef26beb..4846de1 100644 --- a/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToSharedInboxTests.cs +++ b/src/Tests/BirdsiteLive.Pipeline.Tests/Processors/SubTasks/SendTweetsToSharedInboxTests.cs @@ -105,13 +105,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks var followersDalMock = new Mock(MockBehavior.Strict); - foreach (var follower in followers) - { - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); - } var loggerMock = new Mock>(); #endregion @@ -212,14 +205,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks var followersDalMock = new Mock(MockBehavior.Strict); - foreach (var follower in followers) - { - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); - } - var loggerMock = new Mock>(); #endregion @@ -318,13 +303,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks var followersDalMock = new Mock(MockBehavior.Strict); - foreach (var follower in followers) - { - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); - } var loggerMock = new Mock>(); #endregion @@ -398,7 +376,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks #region Mocks var activityPubService = new Mock(MockBehavior.Strict); - foreach (var tweetId in new[] { tweetId2, tweetId3 }) + foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 }) { activityPubService .Setup(x => x.PostNewActivity( @@ -411,7 +389,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks } var statusServiceMock = new Mock(MockBehavior.Strict); - foreach (var tweetId in new[] { tweetId2, tweetId3 }) + foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 }) { statusServiceMock .Setup(x => x.GetActivity( @@ -422,14 +400,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks var followersDalMock = new Mock(MockBehavior.Strict); - foreach (var follower in followers) - { - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId3))) - .Returns(Task.CompletedTask); - } - var loggerMock = new Mock>(); #endregion @@ -504,6 +474,15 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks #region Mocks var activityPubService = new Mock(MockBehavior.Strict); + activityPubService + .Setup(x => x.PostNewActivity( + It.Is(y => y.apObject.id == tweetId1.ToString()), + It.Is(y => y == twitterHandle), + It.Is(y => y == tweetId1.ToString()), + It.Is(y => y == host), + It.Is(y => y == inbox))) + .Returns(Task.CompletedTask); + activityPubService .Setup(x => x.PostNewActivity( It.Is(y => y.apObject.id == tweetId2.ToString()), @@ -523,7 +502,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks .Throws(new HttpRequestException()); var statusServiceMock = new Mock(MockBehavior.Strict); - foreach (var tweetId in new[] { tweetId2, tweetId3 }) + foreach (var tweetId in new[] { tweetId1, tweetId2, tweetId3 }) { statusServiceMock .Setup(x => x.GetActivity( @@ -534,14 +513,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks var followersDalMock = new Mock(MockBehavior.Strict); - foreach (var follower in followers) - { - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId2))) - .Returns(Task.CompletedTask); - } - var loggerMock = new Mock>(); #endregion @@ -633,14 +604,6 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks var followersDalMock = new Mock(MockBehavior.Strict); - foreach (var follower in followers) - { - followersDalMock - .Setup(x => x.UpdateFollowerAsync( - It.Is(y => y.Id == follower.Id && y.FollowingsSyncStatus[twitterUserId] == tweetId))) - .Returns(Task.CompletedTask); - } - var loggerMock = new Mock>(); #endregion