saving synchronized tweets
This commit is contained in:
parent
99f4c65707
commit
3460c72895
|
@ -0,0 +1,31 @@
|
||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using BirdsiteLive.DAL.Contracts;
|
||||||
|
using BirdsiteLive.DAL.Models;
|
||||||
|
|
||||||
|
namespace BirdsiteLive.Pipeline.Processors.SubTasks;
|
||||||
|
|
||||||
|
public class SendTweetsTaskBase
|
||||||
|
{
|
||||||
|
private readonly ISyncTweetsPostgresDal _syncTweetsPostgresDal;
|
||||||
|
|
||||||
|
#region Ctor
|
||||||
|
protected SendTweetsTaskBase(ISyncTweetsPostgresDal syncTweetsPostgresDal)
|
||||||
|
{
|
||||||
|
_syncTweetsPostgresDal = syncTweetsPostgresDal;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
protected async Task SaveSyncTweetAsync(string acct, long tweetId, string host, string inbox)
|
||||||
|
{
|
||||||
|
var inboxUrl = $"https://{host}/{inbox.Trim('/')}";
|
||||||
|
var tweet = new SyncTweet
|
||||||
|
{
|
||||||
|
Acct = acct,
|
||||||
|
TweetId = tweetId,
|
||||||
|
PublishedAt = DateTime.UtcNow,
|
||||||
|
Inbox = inboxUrl
|
||||||
|
};
|
||||||
|
await _syncTweetsPostgresDal.SaveTweetAsync(tweet);
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,7 +17,7 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
Task ExecuteAsync(IEnumerable<ExtractedTweet> tweets, Follower follower, SyncTwitterUser user);
|
Task ExecuteAsync(IEnumerable<ExtractedTweet> tweets, Follower follower, SyncTwitterUser user);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SendTweetsToInboxTask : ISendTweetsToInboxTask
|
public class SendTweetsToInboxTask : SendTweetsTaskBase, ISendTweetsToInboxTask
|
||||||
{
|
{
|
||||||
private readonly IActivityPubService _activityPubService;
|
private readonly IActivityPubService _activityPubService;
|
||||||
private readonly IStatusService _statusService;
|
private readonly IStatusService _statusService;
|
||||||
|
@ -25,9 +25,8 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
private readonly InstanceSettings _settings;
|
private readonly InstanceSettings _settings;
|
||||||
private readonly ILogger<SendTweetsToInboxTask> _logger;
|
private readonly ILogger<SendTweetsToInboxTask> _logger;
|
||||||
|
|
||||||
|
|
||||||
#region Ctor
|
#region Ctor
|
||||||
public SendTweetsToInboxTask(IActivityPubService activityPubService, IStatusService statusService, IFollowersDal followersDal, InstanceSettings settings, ILogger<SendTweetsToInboxTask> logger)
|
public SendTweetsToInboxTask(IActivityPubService activityPubService, IStatusService statusService, IFollowersDal followersDal, InstanceSettings settings, ILogger<SendTweetsToInboxTask> logger, ISyncTweetsPostgresDal syncTweetsPostgresDal): base(syncTweetsPostgresDal)
|
||||||
{
|
{
|
||||||
_activityPubService = activityPubService;
|
_activityPubService = activityPubService;
|
||||||
_statusService = statusService;
|
_statusService = statusService;
|
||||||
|
@ -61,6 +60,7 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
{
|
{
|
||||||
var note = _statusService.GetStatus(user.Acct, tweet);
|
var note = _statusService.GetStatus(user.Acct, tweet);
|
||||||
await _activityPubService.PostNewNoteActivity(note, user.Acct, tweet.Id.ToString(), follower.Host, inbox);
|
await _activityPubService.PostNewNoteActivity(note, user.Acct, tweet.Id.ToString(), follower.Host, inbox);
|
||||||
|
await SaveSyncTweetAsync(user.Acct, tweet.Id, follower.Host, inbox);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (ArgumentException e)
|
catch (ArgumentException e)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using BirdsiteLive.ActivityPub.Models;
|
||||||
using BirdsiteLive.Common.Settings;
|
using BirdsiteLive.Common.Settings;
|
||||||
using BirdsiteLive.DAL.Contracts;
|
using BirdsiteLive.DAL.Contracts;
|
||||||
using BirdsiteLive.DAL.Models;
|
using BirdsiteLive.DAL.Models;
|
||||||
|
@ -16,7 +17,7 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
Task ExecuteAsync(ExtractedTweet[] tweets, SyncTwitterUser user, string host, Follower[] followersPerInstance);
|
Task ExecuteAsync(ExtractedTweet[] tweets, SyncTwitterUser user, string host, Follower[] followersPerInstance);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SendTweetsToSharedInboxTask : ISendTweetsToSharedInboxTask
|
public class SendTweetsToSharedInboxTask : SendTweetsTaskBase, ISendTweetsToSharedInboxTask
|
||||||
{
|
{
|
||||||
private readonly IStatusService _statusService;
|
private readonly IStatusService _statusService;
|
||||||
private readonly IActivityPubService _activityPubService;
|
private readonly IActivityPubService _activityPubService;
|
||||||
|
@ -25,7 +26,7 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
private readonly ILogger<SendTweetsToSharedInboxTask> _logger;
|
private readonly ILogger<SendTweetsToSharedInboxTask> _logger;
|
||||||
|
|
||||||
#region Ctor
|
#region Ctor
|
||||||
public SendTweetsToSharedInboxTask(IActivityPubService activityPubService, IStatusService statusService, IFollowersDal followersDal, InstanceSettings settings, ILogger<SendTweetsToSharedInboxTask> logger)
|
public SendTweetsToSharedInboxTask(IActivityPubService activityPubService, IStatusService statusService, IFollowersDal followersDal, InstanceSettings settings, ILogger<SendTweetsToSharedInboxTask> logger, ISyncTweetsPostgresDal syncTweetsPostgresDal): base(syncTweetsPostgresDal)
|
||||||
{
|
{
|
||||||
_activityPubService = activityPubService;
|
_activityPubService = activityPubService;
|
||||||
_statusService = statusService;
|
_statusService = statusService;
|
||||||
|
@ -61,6 +62,7 @@ namespace BirdsiteLive.Pipeline.Processors.SubTasks
|
||||||
{
|
{
|
||||||
var note = _statusService.GetStatus(user.Acct, tweet);
|
var note = _statusService.GetStatus(user.Acct, tweet);
|
||||||
await _activityPubService.PostNewNoteActivity(note, user.Acct, tweet.Id.ToString(), host, inbox);
|
await _activityPubService.PostNewNoteActivity(note, user.Acct, tweet.Id.ToString(), host, inbox);
|
||||||
|
await SaveSyncTweetAsync(user.Acct, tweet.Id, host, inbox);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (ArgumentException e)
|
catch (ArgumentException e)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using BirdsiteLive.ActivityPub.Models;
|
using BirdsiteLive.ActivityPub.Models;
|
||||||
using BirdsiteLive.Common.Settings;
|
using BirdsiteLive.Common.Settings;
|
||||||
|
@ -87,15 +88,25 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,15 +166,18 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,15 +251,25 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,15 +343,25 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,15 +436,28 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
||||||
|
{
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,9 +540,19 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId2
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -507,6 +564,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -571,15 +629,18 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
.Returns(Task.CompletedTask);
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
await task.ExecuteAsync(tweets.ToArray(), follower, twitterUser);
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -634,9 +695,11 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -649,6 +712,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,15 +109,25 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,15 +209,18 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,15 +315,25 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -405,15 +428,25 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -509,15 +542,28 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
foreach (var tweetId in new[] { tweetId2, tweetId3 })
|
||||||
|
{
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -621,9 +667,18 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
|
syncTweetDalMock
|
||||||
|
.Setup(x => x.SaveTweetAsync(
|
||||||
|
It.Is<SyncTweet>(y => y.Acct == twitterHandle
|
||||||
|
&& y.TweetId == tweetId2
|
||||||
|
&& y.Inbox == $"https://{host}{inbox}"
|
||||||
|
&& y.PublishedAt != default)))
|
||||||
|
.ReturnsAsync(-1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -635,6 +690,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -720,15 +776,18 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
}
|
}
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
await task.ExecuteAsync(tweets.ToArray(), twitterUser, host, followers.ToArray());
|
||||||
|
|
||||||
#region Validations
|
#region Validations
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -800,9 +859,11 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
var loggerMock = new Mock<ILogger<SendTweetsToSharedInboxTask>>();
|
||||||
|
|
||||||
|
var syncTweetDalMock = new Mock<ISyncTweetsPostgresDal>(MockBehavior.Strict);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object);
|
var task = new SendTweetsToSharedInboxTask(activityPubService.Object, statusServiceMock.Object, followersDalMock.Object, settings, loggerMock.Object, syncTweetDalMock.Object);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -815,6 +876,7 @@ namespace BirdsiteLive.Pipeline.Tests.Processors.SubTasks
|
||||||
activityPubService.VerifyAll();
|
activityPubService.VerifyAll();
|
||||||
statusServiceMock.VerifyAll();
|
statusServiceMock.VerifyAll();
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
|
syncTweetDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue