fix follower interator
This commit is contained in:
parent
6e978f1cdd
commit
18d2096dc3
2 changed files with 175 additions and 1 deletions
|
@ -64,7 +64,7 @@ namespace BirdsiteLive.Pipeline.Processors
|
||||||
{
|
{
|
||||||
await _sendTweetsToSharedInbox.ExecuteAsync(tweets, user, followersPerInstance.Key, followersPerInstance.ToArray());
|
await _sendTweetsToSharedInbox.ExecuteAsync(tweets, user, followersPerInstance.Key, followersPerInstance.ToArray());
|
||||||
|
|
||||||
foreach (var f in followers)
|
foreach (var f in followersPerInstance)
|
||||||
await ProcessWorkingUserAsync(f);
|
await ProcessWorkingUserAsync(f);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -324,6 +324,94 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public async Task ProcessAsync_MultiInstances_SharedInbox_OneTweet_ErrorAndReset_Test()
|
||||||
|
{
|
||||||
|
#region Stubs
|
||||||
|
var tweetId = 1;
|
||||||
|
var host1 = "domain1.ext";
|
||||||
|
var host2 = "domain2.ext";
|
||||||
|
var sharedInbox = "/inbox";
|
||||||
|
var userId1 = 2;
|
||||||
|
var userId2 = 3;
|
||||||
|
var userAcct = "user";
|
||||||
|
|
||||||
|
var userWithTweets = new UserWithDataToSync()
|
||||||
|
{
|
||||||
|
Tweets = new[]
|
||||||
|
{
|
||||||
|
new ExtractedTweet
|
||||||
|
{
|
||||||
|
Id = tweetId
|
||||||
|
}
|
||||||
|
},
|
||||||
|
User = new SyncTwitterUser
|
||||||
|
{
|
||||||
|
Acct = userAcct
|
||||||
|
},
|
||||||
|
Followers = new[]
|
||||||
|
{
|
||||||
|
new Follower
|
||||||
|
{
|
||||||
|
Id = userId1,
|
||||||
|
Host = host1,
|
||||||
|
SharedInboxRoute = sharedInbox,
|
||||||
|
PostingErrorCount = 50
|
||||||
|
},
|
||||||
|
new Follower
|
||||||
|
{
|
||||||
|
Id = userId2,
|
||||||
|
Host = host2,
|
||||||
|
SharedInboxRoute = sharedInbox,
|
||||||
|
PostingErrorCount = 50
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Mocks
|
||||||
|
var sendTweetsToInboxTaskMock = new Mock<ISendTweetsToInboxTask>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
var sendTweetsToSharedInboxTaskMock = new Mock<ISendTweetsToSharedInboxTask>(MockBehavior.Strict);
|
||||||
|
sendTweetsToSharedInboxTaskMock
|
||||||
|
.Setup(x => x.ExecuteAsync(
|
||||||
|
It.Is<ExtractedTweet[]>(y => y.Length == 1),
|
||||||
|
It.Is<SyncTwitterUser>(y => y.Acct == userAcct),
|
||||||
|
It.Is<string>(y => y == host1),
|
||||||
|
It.Is<Follower[]>(y => y.Length == 1)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
|
sendTweetsToSharedInboxTaskMock
|
||||||
|
.Setup(x => x.ExecuteAsync(
|
||||||
|
It.Is<ExtractedTweet[]>(y => y.Length == 1),
|
||||||
|
It.Is<SyncTwitterUser>(y => y.Acct == userAcct),
|
||||||
|
It.Is<string>(y => y == host2),
|
||||||
|
It.Is<Follower[]>(y => y.Length == 1)))
|
||||||
|
.Throws(new Exception());
|
||||||
|
|
||||||
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
followersDalMock
|
||||||
|
.Setup(x => x.UpdateFollowerAsync(It.Is<Follower>(y => y.Id == userId1 && y.PostingErrorCount == 0)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
|
followersDalMock
|
||||||
|
.Setup(x => x.UpdateFollowerAsync(It.Is<Follower>(y => y.Id == userId2 && y.PostingErrorCount == 51)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
|
var loggerMock = new Mock<ILogger<SendTweetsToFollowersProcessor>>();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object);
|
||||||
|
var result = await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
|
#region Validations
|
||||||
|
sendTweetsToInboxTaskMock.VerifyAll();
|
||||||
|
sendTweetsToSharedInboxTaskMock.VerifyAll();
|
||||||
|
followersDalMock.VerifyAll();
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
public async Task ProcessAsync_SameInstance_Inbox_OneTweet_Test()
|
public async Task ProcessAsync_SameInstance_Inbox_OneTweet_Test()
|
||||||
{
|
{
|
||||||
|
@ -627,5 +715,91 @@ namespace BirdsiteLive.Pipeline.Tests.Processors
|
||||||
followersDalMock.VerifyAll();
|
followersDalMock.VerifyAll();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[TestMethod]
|
||||||
|
public async Task ProcessAsync_MultiInstances_Inbox_OneTweet_ErrorAndReset_Test()
|
||||||
|
{
|
||||||
|
#region Stubs
|
||||||
|
var tweetId = 1;
|
||||||
|
var host1 = "domain1.ext";
|
||||||
|
var host2 = "domain2.ext";
|
||||||
|
var inbox = "/user/inbox";
|
||||||
|
var userId1 = 2;
|
||||||
|
var userId2 = 3;
|
||||||
|
var userAcct = "user";
|
||||||
|
|
||||||
|
var userWithTweets = new UserWithDataToSync()
|
||||||
|
{
|
||||||
|
Tweets = new[]
|
||||||
|
{
|
||||||
|
new ExtractedTweet
|
||||||
|
{
|
||||||
|
Id = tweetId
|
||||||
|
}
|
||||||
|
},
|
||||||
|
User = new SyncTwitterUser
|
||||||
|
{
|
||||||
|
Acct = userAcct
|
||||||
|
},
|
||||||
|
Followers = new[]
|
||||||
|
{
|
||||||
|
new Follower
|
||||||
|
{
|
||||||
|
Id = userId1,
|
||||||
|
Host = host1,
|
||||||
|
InboxRoute = inbox,
|
||||||
|
PostingErrorCount = 50
|
||||||
|
},
|
||||||
|
new Follower
|
||||||
|
{
|
||||||
|
Id = userId2,
|
||||||
|
Host = host2,
|
||||||
|
InboxRoute = inbox,
|
||||||
|
PostingErrorCount = 50
|
||||||
|
},
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Mocks
|
||||||
|
var sendTweetsToInboxTaskMock = new Mock<ISendTweetsToInboxTask>(MockBehavior.Strict);
|
||||||
|
sendTweetsToInboxTaskMock
|
||||||
|
.Setup(x => x.ExecuteAsync(
|
||||||
|
It.Is<ExtractedTweet[]>(y => y.Length == 1),
|
||||||
|
It.Is<Follower>(y => y.Id == userId1),
|
||||||
|
It.Is<SyncTwitterUser>(y => y.Acct == userAcct)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
|
sendTweetsToInboxTaskMock
|
||||||
|
.Setup(x => x.ExecuteAsync(
|
||||||
|
It.Is<ExtractedTweet[]>(y => y.Length == 1),
|
||||||
|
It.Is<Follower>(y => y.Id == userId2),
|
||||||
|
It.Is<SyncTwitterUser>(y => y.Acct == userAcct)))
|
||||||
|
.Throws(new Exception());
|
||||||
|
|
||||||
|
var sendTweetsToSharedInboxTaskMock = new Mock<ISendTweetsToSharedInboxTask>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
var followersDalMock = new Mock<IFollowersDal>(MockBehavior.Strict);
|
||||||
|
|
||||||
|
followersDalMock
|
||||||
|
.Setup(x => x.UpdateFollowerAsync(It.Is<Follower>(y => y.Id == userId1 && y.PostingErrorCount == 0)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
|
followersDalMock
|
||||||
|
.Setup(x => x.UpdateFollowerAsync(It.Is<Follower>(y => y.Id == userId2 && y.PostingErrorCount == 51)))
|
||||||
|
.Returns(Task.CompletedTask);
|
||||||
|
|
||||||
|
var loggerMock = new Mock<ILogger<SendTweetsToFollowersProcessor>>();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
var processor = new SendTweetsToFollowersProcessor(sendTweetsToInboxTaskMock.Object, sendTweetsToSharedInboxTaskMock.Object, followersDalMock.Object, loggerMock.Object);
|
||||||
|
var result = await processor.ProcessAsync(userWithTweets, CancellationToken.None);
|
||||||
|
|
||||||
|
#region Validations
|
||||||
|
sendTweetsToInboxTaskMock.VerifyAll();
|
||||||
|
sendTweetsToSharedInboxTaskMock.VerifyAll();
|
||||||
|
followersDalMock.VerifyAll();
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue